prisma-dart

Prisma Client Dart is an auto-generated type-safe ORM. It uses Prisma Engine as the data access layer and is as consistent as possible with the Prisma Client JS/TS APIs.

BSD-3-CLAUSE License

Stars
418
Committers
21

Bot releases are hidden (Show)

prisma-dart - πŸŽ‰ release: v2.5.0

Published by medz almost 2 years ago

🌟 Help us spread the word about Prisma ORM for Dart by starring the repo or tweeting about the release. 🌟

Breaking changes

Standalone Prisma client

Prisma client is now exported by orm package and exposes fromEngine constructor.

import 'package:orm/orm.dart';

final PrismaClient prisma = PrismaClient.fromEngine(...);

The generated prisma client now only extends model delegates, and creating a new Prisma client was changed from PrismaClient() to createPrismaClient:

Before:

final PrismaClient prisma = PrismaClient(...);

After:

final PrismaClient prisma = createPrismaClient(...);

Remove preview feature

All previews will be removed and existing Previews will be marked as stable in this release.

Preview will no longer be enabled in future releases, but release *.preview.{num} versions to mark

New features

Support queryRaw and executeRaw methods

Prisma client now supports queryRaw and executeRaw methods.

final PrismaClient prisma = createPrismaClient(...);

final List<Map<String, dynamic>> result = await prisma.$queryRaw('SELECT * FROM User');
final int affectedRows = await prisma.$executeRaw('DELETE FROM User');

Input classes support fromJson method

All input classes now support fromJson method.

final UserCreateInput input = UserCreateInput.fromJson(...);

Engines

  1. Prisma binary engines version updated to d6e67a83f971b175a593ccc12e15c4a757f93ffe
  2. Remote engines version updated to 4.8.0
prisma-dart - πŸŽ‰ release: v2.4.7

Published by medz almost 2 years ago

  1. Now, Data proxy is stable.
  2. Getting platforms is now supported by prisma_get_platform.
prisma-dart - πŸŽ‰ release: v2.4.6

Published by medz almost 2 years ago

🌟 Help us spread the word about Prisma ORM for Dart by starring the repo or tweeting about the release. 🌟

Query Engines

  • Data Proxy: Remote client version updated to 4.7.1.
  • Binary: Query engine version updated to 272861e07ab64f234d3ffc4094e32bd61775599c.

Bug Fixes

  • DMMF: The 'name' field of UniqueIndex should be nullable, not non-nullable as incorrectly defined. (#77)

Highlights

Interactive transactions are now Generally Available

Interactive transactions allow you to pass an async function into a $transaction, and execute any code you like between the individual Prisma Client queries. Once the application reaches the end of the function, the transaction is committed to the database. If your application encounters an error as the transaction is being executed, the function will throw an exception and automatically rollback the transaction.

Before
generator client {
  provider = "prisma-client-dart"
  previewFeatures = ["interactiveTransactions"]
}
Now
generator client {
  provider = "prisma-client-dart"
}
prisma-dart - πŸŽ‰ release: v2.4.5

Published by medz almost 2 years ago

prisma-dart - πŸŽ‰ release: v2.4.4

Published by medz almost 2 years ago

🌟 Help us spread the word about Prisma ORM for Dart by starring the repo or tweeting about the release. 🌟

Engines

  • Update Prisma query engine to 694eea289a8462c80264df36757e4fdc129b1b32 (from 4.6.1)
  • Update Data Proxy remote prisma client to 4.6.1
  • Interactive Transactions for Prisma Data Proxy

Generator

  • Fix standard data type error calling fromJson
prisma-dart -

Published by medz almost 2 years ago

Fix generate command error message

prisma-dart - 2.4.2

Published by medz almost 2 years ago

  • Fix init command generated SQLite database file url
prisma-dart - 2.4.1

Published by medz almost 2 years ago

  • Fix JSON-RPC error code on error data is nullable - #52
prisma-dart - πŸŽ‰ release: v2.4.0

Published by medz almost 2 years ago

🌟 Help us spread the word about Prisma ORM for Dart by starring the repo or tweeting about the release. 🌟

Major improvements

Refactor Prisma config (environment), starting from 2.4.0, Prisma ORM for Dart no longer includes any third-party configurator.

What about the rc package?

The rc package was born for the Prisma ORM for Dart itself, and now the rc package has been refactored into a platform variable wrapper.

Production environment

The .prismarc file in the Dart project directory was loaded by default, and now lib/prisma_configurator.dart is loaded by default.

Previously configured Key in pubspec.yaml was prismarc, now it is production.

Before:

prisma:
    prismarc: {path}

after:

prisma:
    production: {path}

Development environment

The .dev.rc file was loaded by default, now it is prisma/development.dart.

Platform Environment

Prisma adaptively loads platform environment variables according to the current platform environment.

This means that the environment variables in the current system can be read in Dart VM, Flutter JIT, Dart JIT-compiled and Dart AOT-compiled. And it cannot be read in Dart Web and Flutter built app.

Flutter built app is an exception, even though it supports dart:io but there is no environment variable for the build environment in it.

prisma-dart - πŸŽ‰ release: v2.3.1

Published by medz about 2 years ago

🌟 Help us spread the word about Prisma ORM for Dart by starring the repo or Tweeting about the release. 🌟

Features

Logging (Preview)

Prisma ORM for Dart now supports logging as a preview feature. That means, it might have some flaws, but we hope you'll try it out and provide feedback.

To enable logging, you need to set the log property on the PrismaClient constructor and generate command:

prisma generate --preview=logging
PrismaClient(
  log: [
    PrismaLogDefinition(
      level: PrismaLogLevel.query,
      emit: PrismaLogEvent.stdout,
    ),
  ],
)
Subscribe to log events

You can subscribe to log events to perform custom actions when a log occurs.

prisma.$on([PrismaLogLevel.query], (e) {
  print(e);
});
prisma-dart - πŸŽ‰ release: v2.3.0

Published by medz about 2 years ago

🌟 Help us spread the word about Prisma ORM for Dart by starring the repo or Tweeting about the release. 🌟

Features

Development runtime configuration.

When using Prisma ORM to develop an app, you may want the development configuration to be inconsistent with the production environment (although this can be avoided by configuring the production environment separately), but there are always surprises.

For example, when we use Data Proxy, the client and CLI cannot be consistent, because the link address of Data Proxy cannot manage your database.

Now, you just need to add a .dev.rc to the root of your Dart project whose configuration will override the same configuration for prismarc and dotenv:

# .prismarc
DATABASE_URL: prisma://{location}.prisma-data.com/?api_key={Your API key}

# .dev.rc
DATABASE_URL: postgres://user:password@localhost:5432/mydb

For example in the configuration above, the actual CLI runtime uses postgres://user:password@localhost:5432/mydb, while in Prisma Client it uses prisma://{location}.prisma-data.com/?api_key={Your API key}.

Custom development runtime configuration

To customize the development runtime configuration file path, you can write in pubspec.yaml:

prisma:
  development: custom.devrc

Data Proxy (Preview)

Great, Prisma Dart now supports Prisma Data Proxy to access your database!

you just need to run:

dart run orm generate --data-proxy --preview=data-proxy

It can also be turned on from runtime configuration or dotenv:

# Configuration file
PRISMA_GENERATE_DATAPROXY = true

# Command line
dart run orm generate --preview=data-proxy
Custom remote client version.

If the default remote client version is not what you want, you can fix it by configuring:

PRISMA_CLIENT_DATA_PROXY_CLIENT_VERSION = "4.3.1"

Finalizer for PrismaClient

The PrismaClient now has a finalizer that will close the underlying database connection when the client is garbage collected.

Note: This feature is currently in preview state, you need to install 2.3.0 and above, and pass the --preview=finalizer option in the generate command to enable it. More information can be found in the 2.3.0@CLI change log.

CLI

generate command now supports --preview option to generate client for preview features.

E.g.

# Enable finalizer feature for generated PrismaClient.
dart run orm generate --preview=finalizer

Fixed bugs

prisma-dart - 2.3.0-beta.1

Published by medz about 2 years ago

Features

Development runtime configuration.

When using Prisma ORM to develop an app, you may want the development configuration to be inconsistent with the production environment (although this can be avoided by configuring the production environment separately), but there are always surprises.

For example, when we use Data Proxy, the client and CLI cannot be consistent, because the link address of Data Proxy cannot manage your database.

Now, you just need to add a .dev.rc to the root of your Dart project whose configuration will override the same configuration for prismarc and dotenv:

# .prismarc
DATABASE_URL: prisma://{location}.prisma-data.com/?api_key={Your API key}

# .dev.rc
DATABASE_URL: postgres://user:password@localhost:5432/mydb

For example in the configuration above, the actual CLI runtime uses postgres://user:password@localhost:5432/mydb, while in Prisma Client it uses prisma://{location}.prisma-data.com/?api_key ={Your API key}`.

Custom development runtime configuration

To customize the development runtime configuration file path, you can write in pubspec.yaml:

prisma:
  development: custom.devrc

Data Proxy

Great, Prisma Dart now supports Prisma Data Proxy to access your database!

you just need to run:

dart run orm generate --data-proxy

It can also be turned on from runtime configuration or dotenv:

PRISMA_GENERATE_DATAPROXY = true
Custom remote client version.

If the default remote client version is not what you want, you can fix it by configuring:

PRISMA_CLIENT_DATA_PROXY_CLIENT_VERSION = "4.3.1"
prisma-dart - 2.2.3

Published by medz about 2 years ago

🌟 Help us spread the word about Prisma ORM for Dart by starring the repo or Tweeting about the release. 🌟

Bug Fixes

  1. Fixed debian/ubuntu system distro match - #31
  2. Runtime - Fixed parse user facing error
  3. CLI - Fixed check engine version binary incomplete
prisma-dart - πŸŽ‰ 2.2.2

Published by medz about 2 years ago

Fixed generate schema not working (#29

prisma-dart - πŸŽ‰ v2.2.1 released

Published by medz about 2 years ago

🌟 Help us spread the word about Prisma ORM for Dart by starring the repo or Tweeting about the release. 🌟

Major improvements

Auto fix enum name and model name conflicts:

enum role {
 user
 admin
}

model user {
 id Int @id @default(autoincrement())
 role role
}

Before this release, the above schema would result in a role enum and a user model. This is not valid in Dart, so we now auto fix the enum name to Role and the model name to User.

Thanks to @moepoi

Bug fixes

  1. Fixed $transaction options not being passed.
  2. FIxed Using lowercase keywords in schema.prisma cannot generate clients correctly. - #26

Other

  • Update code_builder to ^4.3.0.
prisma-dart - πŸŽ‰ v2.2.0 released

Published by medz about 2 years ago

🌟 Help us spread the word about Prisma ORM for Dart by starring the repo or Tweeting about the release. 🌟

Major improvements:

Input object Types without PrismaUnion wrapper, Before:

final User user = await prisma.user.create(
   data: PrismaUnion(
      zero: UserCreateInput(name: 'odroe'),
   ),
);

After:

final User user = await prisma.user.create(
   data: UserCreateInput(name: 'odroe'),
);

Bug fixes:

  • Nullable fields generating broken field implementations - #23

Features:

  • Add precache command, Populate the Prisma engines cache of binary artifacts.
prisma-dart - v2.1.3 πŸŽ‰

Published by medz about 2 years ago

🌟 Help us spread the word about Prisma ORM for Dart by starring the repo or Tweeting about the release. 🌟

Major improvements:

  1. refactor PrismaClientKnownRequestError, Prisma Client throws a PrismaClientKnownRequestError exception if the query engine returns a known error related to the request - for example, a unique constraint violation. Reference πŸ‘‰ PrismaClientKnownRequestError
  2. All exceptions on the client side will throw predictable errors,Reference πŸ‘‰ PrismaClientKnownRequestError
  3. query_engine renamed to engine_core

Better error message

Take transaction errors as an example, before simply throwing PrismaServerError without any friendly prompts. Now:

PrismaClientUnknownRequestError:
Use the `prisma.$transaction()` API to run queries in a transaction.

Add the following to your `schema.prisma` file:

generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["interactiveTransactions"]
}

Read more about transactions in our documentation:
 - https://github.com/odroe/prisma-dart#qa
 - https://www.prisma.io/docs/concepts/components/prisma-client/transactions#interactive-transactions-in-preview

If the engine is not found:

PrismaClientInitializationError:
  message: Could not find query engine binary for current platform "macos" in query-engine path.

This probably happens, because you built Prisma Client on a different platform.

Searched Locations:
  - /Users/seven/workspace/prisma/example
  - /Users/seven/workspace/prisma/example/.dart_tool/prisma
  - /Users/seven/workspace/prisma/example/prisma
  - /Users/seven/workspace/prisma/example/.dart_tool/pub/bin/example

You already added the platform "macos" to the "generator" block in the "schema.prisma" file as described in https://pris.ly/d/client-generator, but something went wrong. That's suboptimal.

Please create an issue at https://github.com/odroe/prisma-dart/issues/new
  errorCode: null
  clientVersion: 2.1.2

$transaction options

prisma.$transaction now supports the following options:

final prisma = PrismaClient();
await prisma.$transaction((prisma) async {
   // ...
}, TransactionOptions(
   maxWait: 2000,
   timeout: 5000,
   isolationLevel: TransactionIsolationLevel.ReadUncommitted,
));

More details πŸ‘‰ Interactive transactions

Bug fixes

  1. Fixed packageVersion not updating with version
  2. Fixed binary query engine not automatically searching when executable is specified
  3. Fixed binary query engine not automatically searching when specifying PRISMA_QUERY_ENGINE_BINARY environment variable

Engines version

c875e43600dfe042452e0b868f7a48b817b9640b

prisma-dart - πŸŽ‰ Prisma ORM for Dart 2.1.2 released

Published by medz about 2 years ago

🌟 Help us spread the word about Prisma ORM for Dart by starring the repo or Tweeting about the release. 🌟

Bug fixes

  • Fix the problem of repeated operation of the lookup runtime configuration
  • Fix setting owerwrite datasources causing engine startup failure

Refactor

Refactored to owerwrite datasources to convert to engine readable settings

prisma-dart -

Published by medz about 2 years ago

Support custom runtime configuration.

prisma-dart - πŸŽ‰ Prisma for Dart v2.1.0 released

Published by medz about 2 years ago

🌟 Help us spread the word about Prisma ORM for Dart by starring the repo or Tweeting about the release. 🌟

Major improvements:

Runtime configuration

Previously, use prisma.yaml to configure Prisma:

environment:
   DATABASE_URL: postgres://user:password@localhost:5432/mydb

Now, we have introduced a new configuration method, Runtime Configuration compatible with dotenv format:

# .prismarc
DATABASE_URL=postgres://user:password@localhost:5432/mydb

# Database host
DATABASE_HOST=postgres://user:password@localhost:5432
DATABASE_URL=${DATABASE_HOST}/mydb

If you have dotenv in mind, you just need to add the database URL configuration to .env:

DATABASE_URL=postgres://user:password@localhost:5432/mydb

For more usage of runtime configuration, please see πŸ‘‰ https://pub.dev/packages/rc

Custom configuration

Now, you can customize your prisma project configuration in pubspec.yaml:

...
prisma:
   prismarc: path/a/b/c/custom.prismarc
   dotenv: path/a/b/c/custom.env
   schema: path/a/b/c/custom.prisma
...
Parameter Description Default
prismarc Custom runtime configuration path .prismarc
dotenv Custom dotenv path .env
schema Custom Prisma schema path prisma/schema.prisma

Custom engine path

Previously, the Prisma engine was downloaded into the .dart_tool/prisma directory, now you can customize it.

Custom engines path with runtime configuration
# Query binary engine
PRISMA_QUERY_ENGINE_BINARY(path) = custom-engines/query-engine

# Migration binary engine
PRISMA_MIGRATION_ENGINE_BINARY(path) = custom-engines/migration-engine

# Introspection binary engine
PRISMA_INTROSPECTION_ENGINE_BINARY(path) = custom-engines/introspection-engine

# Format binary engine
PRISMA_FMT_BINARY(path) = custom-engines/prisma-fmt
Custom engines path with dotenv
PRISMA_QUERY_ENGINE_BINARY=path/to/custom-engines/query-engine
PRISMA_MIGRATION_ENGINE_BINARY=path/to/custom-engines/migration-engine
PRISMA_INTROSPECTION_ENGINE_BINARY=path/to/custom-engines/introspection-engine
PRISMA_FMT_BINARY=path/to/custom-engines/prisma-fmt

Refactored package:orm/configure.dart

Previously, we have package:orm/configure.dart to configure Prisma, now we have refactored it to package:orm/prisma.dart:

import 'package:orm/configure.dart';

print(configure('DATABASE_URL'));

Now, you can use package:orm/configure.dart to configure Prisma:

import 'package:orm/configure.dart';

print(environment.DATABASE_URL);

Bug fixes:

  1. Fix map and throws binary errors - #16
  2. Problems using Model with relation - #14

Features:

  1. Generator generate import support show.
  2. Prisma CLI debug allow set to dotenv or runtime configuration.
  3. Prisma CLI debug print stack trace.