Skip to content

ZhenjaMax/adapter-ydb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Adapter-YDB

Неофициальный адаптер Prisma ORM для работы с базой данных YDB через драйверный API. Пакет предоставляет фабрику PrismaYdbAdapterFactory, которая позволяет использовать Prisma Client поверх YQL-запросов.

Версия: v0.0.7.

Установка

npm install adapter-ydb@alpha

Пример запуска

Полный пример представлен в файле src/playground/main.ts. Он демонстрирует CRUD-операции с таблицей users в YDB.

Создание Prisma Schema

Пример схемы представлен в prisma/schema.prisma.

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}
  • provider = "postgresql" необходим для совместимости;
  • url = env("DATABASE_URL") необходим для запуска клиента;
    • воспользуйтесь командой npm prisma init;
    • добавьте в файл .env API KEY для Prisma; на текущем этапе разработки Prisma Client требует URL, он фактически не используется и нужен лишь для совместимости; можно указать dummy-URL на prisma+postgres://accelerate.prisma-data.net.

Покдлючение к YDB и генерация клиента Prisma

const endpoint = 'grpc://localhost:2136'
const database = '/local'

сonst factory = new PrismaYdbAdapterFactory({ endpoint, database })
const prisma = new PrismaClient({
    adapter: factory,
    log: ['error']
})

Для подключения потребуется развернуть локально YDB, настроенные контейнеры представлены в src/playground/docker-compose.yml

Выполнение запросов

await prisma.$executeRawUnsafe(`CREATE TABLE IF NOT EXISTS users (
    id Uint64,
    name Utf8,
    age Int32,
    created_at Datetime,
    PRIMARY KEY (id)
);`)

await prisma.$executeRaw(sql`
    UPSERT INTO users (id, name, age, created_at)
    VALUES (${uint64(user.id)}, ${user.name}, ${int32(user.age)}, CurrentUtcDatetime());
`)

Отключение от YDB

await prisma.$disconnect()

Текущие задачи

  • Обеспечить выполнение большинства операций через API Prisma ORM.
  • Упростить архитектуру программного модуля.
    • Убрать обёртку импорта провайдера (provider) через PostgreSQL.
    • Решить проблему с невозможностью импорта в Prisma собственного провайдера БД.
  • Реализовать поддержку специальных сценариев пользования:
    • федеративные запросы;
    • транзакционные операции.
  • Реализовать автоматическое тестирование.

Лицензия

Проект распространяется по лицензии MIT.