From cc362fb704855cd0cba24e7ead27839a9ee62052 Mon Sep 17 00:00:00 2001 From: thomashii Date: Sat, 13 Jan 2024 17:50:20 +0800 Subject: [PATCH] Updated postgresql pool --- packages/orm/angel_orm_postgres/CHANGELOG.md | 2 +- packages/orm/angel_orm_postgres/README.md | 4 ++ .../orm/angel_orm_postgres/example/main.dart | 14 +++--- .../lib/src/orm_postgres.dart | 8 ++-- .../lib/src/orm_postgres_pool.dart | 16 +++---- .../orm/angel_orm_postgres/test/common.dart | 46 +++++-------------- 6 files changed, 35 insertions(+), 55 deletions(-) diff --git a/packages/orm/angel_orm_postgres/CHANGELOG.md b/packages/orm/angel_orm_postgres/CHANGELOG.md index 1fe2b716..acd5428a 100644 --- a/packages/orm/angel_orm_postgres/CHANGELOG.md +++ b/packages/orm/angel_orm_postgres/CHANGELOG.md @@ -3,9 +3,9 @@ ## 8.1.0 * Updated repository links -* Updated `postgres` to 3.0.0 * Updated `lints` to 3.0.0 * Fixed linter warnings +* [BREAKING] Updated `postgres` to 3.0.0 ## 8.0.0 diff --git a/packages/orm/angel_orm_postgres/README.md b/packages/orm/angel_orm_postgres/README.md index 9a1e8500..11f27dee 100644 --- a/packages/orm/angel_orm_postgres/README.md +++ b/packages/orm/angel_orm_postgres/README.md @@ -12,3 +12,7 @@ PostgreSQL support for Angel3 ORM. * PostgreSQL version 10 or greater For documentation about the ORM, see [Developer Guide](https://angel3-docs.dukefirehawk.com/guides/orm) + +## Migration + +Posrgresql is upgraded from 2.x.x to 3.x.x in version 8.1.0. diff --git a/packages/orm/angel_orm_postgres/example/main.dart b/packages/orm/angel_orm_postgres/example/main.dart index 1dcf0be8..b2bc8c69 100644 --- a/packages/orm/angel_orm_postgres/example/main.dart +++ b/packages/orm/angel_orm_postgres/example/main.dart @@ -1,19 +1,19 @@ import 'dart:io'; import 'package:angel3_orm_postgres/angel3_orm_postgres.dart'; +import 'package:postgres/postgres.dart'; void main() async { - var executor = PostgreSqlPoolExecutor(PgPool( - PgEndpoint( + var executor = PostgreSqlPoolExecutor(Pool.withEndpoints([ + Endpoint( host: 'localhost', port: 5432, database: Platform.environment['POSTGRES_DB'] ?? 'orm_test', username: Platform.environment['POSTGRES_USERNAME'] ?? 'test', password: Platform.environment['POSTGRES_PASSWORD'] ?? 'test123', - ), - settings: PgPoolSettings() - ..maxConnectionAge = Duration(hours: 1) - ..concurrency = 5, - )); + ) + ], + settings: PoolSettings( + maxConnectionAge: Duration(hours: 1), maxConnectionCount: 5))); var rows = await executor.query('users', 'SELECT * FROM users', {}); print(rows); diff --git a/packages/orm/angel_orm_postgres/lib/src/orm_postgres.dart b/packages/orm/angel_orm_postgres/lib/src/orm_postgres.dart index 24b30f4a..6708b657 100644 --- a/packages/orm/angel_orm_postgres/lib/src/orm_postgres.dart +++ b/packages/orm/angel_orm_postgres/lib/src/orm_postgres.dart @@ -105,13 +105,13 @@ class PostgreSqlExecutor extends QueryExecutor { var conn = _session as Connection; - return await conn.runTx((ctx) async { + return await conn.runTx((session) async { try { //logger.fine('Entering transaction'); - var tx = PostgreSqlExecutor(ctx, logger: logger); - return await f(tx); + var exec = PostgreSqlExecutor(session, logger: logger); + return await f(exec); } catch (e) { - ctx.rollback(); + session.rollback(); //ctx.cancelTransaction(reason: e.toString()); logger.warning("The transation has failed due to ", e); rethrow; diff --git a/packages/orm/angel_orm_postgres/lib/src/orm_postgres_pool.dart b/packages/orm/angel_orm_postgres/lib/src/orm_postgres_pool.dart index 9032e945..59278daf 100644 --- a/packages/orm/angel_orm_postgres/lib/src/orm_postgres_pool.dart +++ b/packages/orm/angel_orm_postgres/lib/src/orm_postgres_pool.dart @@ -2,13 +2,13 @@ import 'dart:async'; import 'dart:convert'; import 'package:angel3_orm/angel3_orm.dart'; import 'package:logging/logging.dart'; -import 'package:postgres_pool/postgres_pool.dart'; +import 'package:postgres/postgres.dart'; import '../angel3_orm_postgres.dart'; /// A [QueryExecutor] that uses `package:postgres_pool` for connetions pooling. class PostgreSqlPoolExecutor extends QueryExecutor { - final PgPool _pool; + final Pool _pool; /// An optional [Logger] to print information to. late Logger logger; @@ -23,7 +23,7 @@ class PostgreSqlPoolExecutor extends QueryExecutor { Dialect get dialect => _dialect; /// The underlying connection pooling. - PgPool get pool => _pool; + Pool get pool => _pool; /// Closes all the connections in the pool. Future close() { @@ -32,7 +32,7 @@ class PostgreSqlPoolExecutor extends QueryExecutor { /// Run query. @override - Future query( + Future query( String tableName, String query, Map substitutionValues, {String returningQuery = '', List returningFields = const []}) { if (returningFields.isNotEmpty) { @@ -54,16 +54,16 @@ class PostgreSqlPoolExecutor extends QueryExecutor { } }); - return _pool.run((pgContext) async { - return await pgContext.query(query, substitutionValues: param); + return _pool.run((session) async { + return await session.execute(Sql.named(query), parameters: param); }); } /// Run query in a transaction. @override Future transaction(FutureOr Function(QueryExecutor) f) async { - return _pool.runTx((pgContext) async { - var exec = PostgreSqlExecutor(pgContext, logger: logger); + return _pool.runTx((session) async { + var exec = PostgreSqlExecutor(session, logger: logger); return await f(exec); }); } diff --git a/packages/orm/angel_orm_postgres/test/common.dart b/packages/orm/angel_orm_postgres/test/common.dart index a3ecb299..c8135533 100644 --- a/packages/orm/angel_orm_postgres/test/common.dart +++ b/packages/orm/angel_orm_postgres/test/common.dart @@ -9,9 +9,6 @@ FutureOr Function() pg(Iterable schemas) { // Use single connection return () => connectToPostgres(schemas); - // Use connection pooling with 1 connection - //return () => connectToPostgresPool(schemas); - // Use PostgreSqlExecutorPool (Not working) //return () => connectToPostgresPool1(schemas); } @@ -38,47 +35,26 @@ Future connectToPostgres(Iterable schemas) async { return PostgreSqlExecutor(conn, logger: Logger.root); } -Future connectToPostgresPool1( - Iterable schemas) async { - PostgreSQLConnection connectionFactory() { - return PostgreSQLConnection( - 'localhost', 5432, Platform.environment['POSTGRES_DB'] ?? 'orm_test', - username: Platform.environment['POSTGRES_USERNAME'] ?? 'test', - password: Platform.environment['POSTGRES_PASSWORD'] ?? 'test123'); - } - - PostgreSQLConnection conn = connectionFactory(); - await conn.open(); - - // Run sql to create the tables - for (var s in schemas) { - await conn.execute(await File('test/migrations/$s.sql').readAsString()); - } - - return PostgreSqlExecutorPool(5, connectionFactory, logger: Logger.root); -} - Future connectToPostgresPool( Iterable schemas) async { - var dbPool = PgPool( - PgEndpoint( + var dbPool = Pool.withEndpoints([ + Endpoint( host: 'localhost', port: 5432, database: Platform.environment['POSTGRES_DB'] ?? 'orm_test', username: Platform.environment['POSTGRES_USERNAME'] ?? 'test', password: Platform.environment['POSTGRES_PASSWORD'] ?? 'test123', - ), - settings: PgPoolSettings() - ..maxConnectionAge = Duration(hours: 1) - ..concurrency = 200, - ); + ) + ], + settings: PoolSettings( + maxConnectionAge: Duration(hours: 1), maxConnectionCount: 5)); // Run sql to create the tables in a transaction - //await _pool.runTx((conn) async { - // for (var s in schemas) { - // await conn.execute(await File('test/migrations/$s.sql').readAsString()); - // } - //}); + await dbPool.runTx((conn) async { + for (var s in schemas) { + await conn.execute(await File('test/migrations/$s.sql').readAsString()); + } + }); return PostgreSqlPoolExecutor(dbPool, logger: Logger.root); }