runtime library

Prisma Flutter Connector - Runtime Library

This library provides the runtime components for the Prisma Flutter Connector, enabling direct database access from Dart/Flutter applications without requiring a GraphQL backend.

Features

  • Direct Database Access: Connect directly to PostgreSQL, MySQL, SQLite, and Supabase
  • Type-Safe Queries: Build queries using Prisma's JSON protocol
  • Multiple Adapters: Swap database providers easily
  • Transaction Support: Full ACID transaction support
  • Offline-First: Use SQLite adapter for mobile offline capabilities

Supported Databases

  • PostgreSQL via postgres package
  • Supabase (PostgreSQL with direct connection)
  • SQLite via sqflite package (mobile)
  • MySQL (coming soon)

Usage

import 'package:prisma_flutter_connector/runtime.dart';
import 'package:postgres/postgres.dart' as pg;

// Connect to database
final connection = await pg.Connection.open(
  pg.Endpoint(
    host: 'localhost',
    database: 'mydb',
    username: 'user',
    password: 'password',
  ),
);

// Create adapter
final adapter = PostgresAdapter(connection);
final executor = QueryExecutor(adapter: adapter);

// Build and execute query
final query = JsonQueryBuilder()
    .model('User')
    .action(QueryAction.findMany)
    .where({'email': FilterOperators.contains('@example.com')})
    .orderBy({'createdAt': 'desc'})
    .build();

final users = await executor.executeQueryAsMaps(query);
print('Found ${users.length} users');

Database Adapters

PostgreSQL

final adapter = PostgresAdapter(connection);

Supabase

final adapter = await SupabaseAdapter.fromConnectionString(
  'postgresql://user:pass@host:6543/db?pgbouncer=true',
);

SQLite (Mobile)

final database = await openDatabase('app.db');
final adapter = SQLiteAdapter(database);

Transactions

await executor.executeInTransaction((tx) async {
  await tx.executeMutation(createUserQuery);
  await tx.executeMutation(createProfileQuery);
  // Both succeed or both rollback
});

Classes

BaseExecutor
Abstract base class for query execution.
ConnectionInfo
Connection information for a database.
FilterOperators
Filter operators for WHERE clauses.
JsonFieldSelection
Selection for a specific field.
JsonQuery
Represents a complete JSON query in Prisma's format.
JsonQueryArgs
Arguments for a JSON query.
JsonQueryBuilder
Builder for constructing JSON queries.
JsonSelection
Field selection in a query.
PostgresAdapter
PostgreSQL database adapter.
PostgresTransaction
PostgreSQL transaction implementation.
PrismaValue
Special Prisma value types (DateTime, Json, Bytes, etc.).
QueryExecutor
Executes Prisma queries against a database adapter.
SqlCompiler
Compiles JSON queries to SQL.
SqlDriverAdapter
Main database adapter interface.
SQLiteAdapter
SQLite database adapter for mobile apps.
SQLiteTransaction
SQLite transaction implementation.
SqlQuery
Represents a SQL query with parameterized values and type information.
SqlQueryable
Interface for executing SQL queries (implemented by adapters and transactions).
SqlResultSet
Result set from a SQL query execution.
SupabaseAdapter
Supabase database adapter using direct PostgreSQL connection.
Transaction
Abstract interface for database transactions.
TransactionExecutor
Query executor for use within transactions.

Enums

ArgType
Type information for query arguments.
ColumnType
Column type information for result set columns.
IsolationLevel
Transaction isolation levels.
QueryAction
Query action types (matching Prisma's actions).

Exceptions / Errors

AdapterError
Error thrown by database adapters.