Skip to content

Commit fda20b6

Browse files
authored
Integrate package:typed_sql with a preliminary schema and minimal test. (#9045)
1 parent 1d41d6d commit fda20b6

File tree

15 files changed

+1103
-53
lines changed

15 files changed

+1103
-53
lines changed

app/build.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ targets:
88
- 'lib/account/models.dart'
99
- 'lib/admin/models.dart'
1010
- 'lib/dartdoc/models.dart'
11+
- 'lib/database/*.dart'
1112
- 'lib/frontend/handlers/pubapi.dart'
1213
- 'lib/frontend/handlers/routes.dart'
1314
- 'lib/frontend/handlers/redirects.dart'

app/lib/database/database.dart

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@ import 'package:clock/clock.dart';
1010
import 'package:gcloud/service_scope.dart' as ss;
1111
import 'package:meta/meta.dart';
1212
import 'package:postgres/postgres.dart';
13+
import 'package:pub_dev/database/schema.dart';
1314
import 'package:pub_dev/service/secret/backend.dart';
1415
import 'package:pub_dev/shared/configuration.dart';
1516
import 'package:pub_dev/shared/env_config.dart';
17+
import 'package:typed_sql/typed_sql.dart';
1618

1719
final _random = Random.secure();
1820

@@ -27,8 +29,10 @@ PrimaryDatabase? get primaryDatabase =>
2729
/// Access to the primary database connection and object mapping.
2830
class PrimaryDatabase {
2931
final Pool _pg;
32+
final DatabaseAdapter _adapter;
33+
final Database<PrimarySchema> db;
3034

31-
PrimaryDatabase._(this._pg);
35+
PrimaryDatabase._(this._pg, this._adapter, this.db);
3236

3337
/// Gets the connection string either from the environment variable or from
3438
/// the secret backend, connects to it and registers the primary database
@@ -77,10 +81,14 @@ class PrimaryDatabase {
7781

7882
static Future<PrimaryDatabase> _fromConnectionString(String value) async {
7983
final pg = Pool.withUrl(value);
80-
return PrimaryDatabase._(pg);
84+
final adapter = DatabaseAdapter.postgres(pg);
85+
final db = Database<PrimarySchema>(adapter, SqlDialect.postgres());
86+
await db.createTables();
87+
return PrimaryDatabase._(pg, adapter, db);
8188
}
8289

8390
Future<void> close() async {
91+
await _adapter.close();
8492
await _pg.close();
8593
}
8694

app/lib/database/schema.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'dart:convert';
6+
7+
import 'package:json_annotation/json_annotation.dart';
8+
import 'package:meta/meta.dart';
9+
import 'package:pub_dev/admin/actions/actions.dart';
10+
import 'package:pub_dev/task/models.dart';
11+
import 'package:typed_sql/typed_sql.dart';
12+
13+
part 'schema.g.dart';
14+
part 'schema.task.dart';
15+
16+
abstract final class PrimarySchema extends Schema {
17+
Table<Task> get tasks;
18+
19+
Table<TaskDependency> get taskDependencies;
20+
}

0 commit comments

Comments
 (0)