Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kysely-org/kysely-singlestore
Kysely dialects, plugins and other goodies for Singlestore (formerly MemSQL)
https://github.com/kysely-org/kysely-singlestore
analytics browser columnstore data-api deno dialect in-memory-database kysely mysql query-builder serverless singlestore sql type-safe typescript
Last synced: 3 days ago
JSON representation
Kysely dialects, plugins and other goodies for Singlestore (formerly MemSQL)
- Host: GitHub
- URL: https://github.com/kysely-org/kysely-singlestore
- Owner: kysely-org
- License: mit
- Created: 2022-09-23T20:51:17.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-05-14T21:30:05.000Z (6 months ago)
- Last Synced: 2024-05-15T16:53:43.144Z (6 months ago)
- Topics: analytics, browser, columnstore, data-api, deno, dialect, in-memory-database, kysely, mysql, query-builder, serverless, singlestore, sql, type-safe, typescript
- Language: TypeScript
- Homepage:
- Size: 323 KB
- Stars: 7
- Watchers: 2
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
![Logo](./assets/kysely-singlestore.png)
# kysely-singlestore
[![Codacy Badge](https://app.codacy.com/project/badge/Grade/0f759c07e4dd4f9889a21ea2a49d5a2e)](https://www.codacy.com/gh/igalklebanov/kysely-singlestore/dashboard?utm_source=github.com&utm_medium=referral&utm_content=igalklebanov/kysely-singlestore&utm_campaign=Badge_Grade)
![Powered by TypeScript](https://img.shields.io/badge/powered%20by-typescript-blue.svg)[Kysely](https://github.com/koskimas/kysely) dialects, plugins and other goodies for [SingleStore](https://www.singlestore.com/) (formerly MemSQL).
## Installation
### Node.js
#### NPM 7+
```bash
npm i kysely-singlestore
```#### NPM <7
```bash
npm i kysely-singlestore kysely
```#### Yarn
```bash
yarn add kysely-singlestore kysely
```#### PNPM
```bash
pnpm add kysely-singlestore kysely
```### Deno
This package uses/extends some [Kysely](https://github.com/koskimas/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`](https://deno.land/[email protected]/linking_to_external_code/import_maps) file.
```json
{
"imports": {
"kysely": "https://cdn.jsdelivr.net/npm/[email protected]/dist/esm/index.js"
}
}
```## Usage
### Data API Dialect
[SingleStore Data API](https://docs.singlestore.com/managed-service/en/reference/data-api.html) 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 node versions are supported as well, just swap [`undici`](https://github.com/nodejs/undici) with [`node-fetch`](https://github.com/node-fetch/node-fetch).
```ts
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({
dialect: new SingleStoreDataApiDialect({
database: '',
deserialization: {
castDatesAsNativeDates: true,
castTinyIntAsBoolean: true,
deserialize: (value, dataType, columnName) =>
dataType === SingleStoreDataType.Json && columnName === 'pet' ? new Pet(value) : undefined,
unwrapDecimals: true,
},
fetch,
hostname: '',
password: '',
username: '',
}),
})
```#### Browser
```ts
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({
dialect: new SingleStoreDataApiDialect({
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: '',
password: '',
username: '',
}),
})
```#### Deno
```ts
import {Kysely} from 'https://cdn.jsdelivr.net/npm/[email protected]/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({
dialect: new SingleStoreDataApiDialect({
database: '',
deserialization: {
castDatesAsNativeDates: true,
castTinyIntAsBoolean: true,
deserialize: (value, dataType, columnName) =>
dataType === SingleStoreDataType.Json && columnName === 'pet' ? new Pet(value) : undefined,
unwrapDecimals: true,
},
fetch: fetch,
hostname: '',
password: '',
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`