@otwdesign/db-core 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/handler.js CHANGED
@@ -13,6 +13,10 @@ const QUERY_ID = /^[A-Za-z0-9_-]{1,64}$/;
13
13
  const MAX_FILTERS = 20;
14
14
  const MAX_CHANGES = 1_000;
15
15
  const MAX_LIST = 1_000;
16
+ /** A connection's other databases kept open at once; the one used longest ago closes first. */
17
+ const MAX_DATABASES = 8;
18
+ /** PostgreSQL's NAMEDATALEN, less its terminator: the longest database name, in bytes. */
19
+ const MAX_DATABASE_NAME = 63;
16
20
  const OPERATORS = new Set([
17
21
  '=',
18
22
  '<>',
@@ -55,6 +59,8 @@ export function createDbAdmin(options) {
55
59
  const limits = { ...DEFAULT_LIMITS, ...options.limits };
56
60
  const audit = options.audit === false ? undefined : (options.audit ?? logAudit);
57
61
  const drivers = new Map();
62
+ /** Each connection's other databases' drivers, the one used last at the end. */
63
+ const others = new Map();
58
64
  const running = new Map();
59
65
  const open = options.driver ?? openDriver;
60
66
  const loadUi = options.ui === false ? undefined : (options.ui ?? defaultUi);
@@ -67,14 +73,54 @@ export function createDbAdmin(options) {
67
73
  }
68
74
  return found;
69
75
  }
70
- /** The connection by name, with this viewer's access to it; unknown and hidden look the same. */
71
- function reach(viewer, name) {
76
+ /**
77
+ * The driver for one of the connection's other databases. The 8 used last stay open; opening a
78
+ * ninth closes the one used longest ago, so a viewer can't keep pools open without end.
79
+ */
80
+ function driverAt(connection, database) {
81
+ let open = others.get(connection.name);
82
+ if (!open)
83
+ others.set(connection.name, (open = new Map()));
84
+ let found = open.get(database);
85
+ if (found)
86
+ open.delete(database);
87
+ else
88
+ found = driver(connection).withDatabase(database);
89
+ open.set(database, found);
90
+ if (open.size > MAX_DATABASES) {
91
+ const [oldest, evicted] = open.entries().next().value;
92
+ open.delete(oldest);
93
+ evicted.close().catch((error) => {
94
+ console.error(`otw-db: could not close database "${oldest}" of "${connection.name}"`, error);
95
+ });
96
+ }
97
+ return found;
98
+ }
99
+ /**
100
+ * The connection by name, with this viewer's access to it and the driver for `database`: one of
101
+ * the server's other databases, or the connection's own when none is named. Unknown and hidden
102
+ * connections look the same.
103
+ */
104
+ function reach(viewer, name, database) {
72
105
  const connection = typeof name === 'string' ? connections.get(name) : undefined;
73
106
  const access = connection ? accessOf(viewer, connection) : null;
74
107
  if (!connection || !access) {
75
108
  throw new DbAdminError(`There's no connection "${String(name)}".`, 404, 'unknown-connection');
76
109
  }
77
- return { connection, access };
110
+ if (database === undefined || database === null || database === '') {
111
+ return { connection, access, db: driver(connection) };
112
+ }
113
+ const named = databaseName(database);
114
+ if (!opensOthers(connection))
115
+ throw oneDatabase(connection);
116
+ return { connection, access, db: driverAt(connection, named), database: named };
117
+ }
118
+ /** Whether the connection may open its server's other databases, and its driver can. */
119
+ function opensOthers(connection) {
120
+ if (connection.databases === 'one')
121
+ return false;
122
+ const opened = driver(connection);
123
+ return typeof opened.databases === 'function' && typeof opened.withDatabase === 'function';
78
124
  }
79
125
  async function record(event) {
80
126
  if (!audit)
@@ -99,7 +145,10 @@ export function createDbAdmin(options) {
99
145
  // A kind without a driver yet is listed, but can't be opened.
100
146
  let capabilities = null;
101
147
  try {
102
- capabilities = driver(connection).capabilities;
148
+ capabilities = {
149
+ ...driver(connection).capabilities,
150
+ databases: opensOthers(connection),
151
+ };
103
152
  }
104
153
  catch (error) {
105
154
  if (!(error instanceof DbAdminError))
@@ -113,12 +162,23 @@ export function createDbAdmin(options) {
113
162
  return { connections: visible };
114
163
  },
115
164
  },
165
+ {
166
+ method: 'GET',
167
+ path: '/api/databases',
168
+ async run(request, viewer) {
169
+ const { connection, db } = reach(viewer, new URL(request.url).searchParams.get('connection'));
170
+ if (!opensOthers(connection))
171
+ throw oneDatabase(connection);
172
+ return await db.databases();
173
+ },
174
+ },
116
175
  {
117
176
  method: 'GET',
118
177
  path: '/api/tables',
119
178
  async run(request, viewer) {
120
- const { connection } = reach(viewer, new URL(request.url).searchParams.get('connection'));
121
- return { tables: await driver(connection).tables() };
179
+ const params = new URL(request.url).searchParams;
180
+ const { db } = reach(viewer, params.get('connection'), params.get('database'));
181
+ return { tables: await db.tables() };
122
182
  },
123
183
  },
124
184
  {
@@ -126,8 +186,8 @@ export function createDbAdmin(options) {
126
186
  path: '/api/table',
127
187
  async run(request, viewer) {
128
188
  const params = new URL(request.url).searchParams;
129
- const { connection } = reach(viewer, params.get('connection'));
130
- const table = await driver(connection).table(text(params.get('schema'), 'schema'), text(params.get('name'), 'name'));
189
+ const { db } = reach(viewer, params.get('connection'), params.get('database'));
190
+ const table = await db.table(text(params.get('schema'), 'schema'), text(params.get('name'), 'name'));
131
191
  if (!table)
132
192
  throw new DbAdminError("There's no such table.", 404, 'unknown-table');
133
193
  return { table };
@@ -137,8 +197,9 @@ export function createDbAdmin(options) {
137
197
  method: 'GET',
138
198
  path: '/api/info',
139
199
  async run(request, viewer) {
140
- const { connection } = reach(viewer, new URL(request.url).searchParams.get('connection'));
141
- return { info: await driver(connection).info() };
200
+ const params = new URL(request.url).searchParams;
201
+ const { db } = reach(viewer, params.get('connection'), params.get('database'));
202
+ return { info: await db.info() };
142
203
  },
143
204
  },
144
205
  {
@@ -146,7 +207,7 @@ export function createDbAdmin(options) {
146
207
  path: '/api/count',
147
208
  async run(request, viewer) {
148
209
  const body = await json(request);
149
- const { connection } = reach(viewer, body.connection);
210
+ const { connection, db, database } = reach(viewer, body.connection, body.database);
150
211
  const target = {
151
212
  schema: text(body.schema, 'schema'),
152
213
  table: text(body.table, 'table'),
@@ -155,13 +216,14 @@ export function createDbAdmin(options) {
155
216
  const started = performance.now();
156
217
  const statement = `count ${target.schema}.${target.table}`;
157
218
  try {
158
- const rows = await driver(connection).count(target, {
219
+ const rows = await db.count(target, {
159
220
  timeoutMs: limits.timeoutMs,
160
221
  signal: request.signal,
161
222
  });
162
223
  await record({
163
224
  viewer: viewer.id,
164
225
  connection: connection.name,
226
+ ...(database ? { database } : {}),
165
227
  action: 'count',
166
228
  statement,
167
229
  durationMs: Math.round(performance.now() - started),
@@ -173,6 +235,7 @@ export function createDbAdmin(options) {
173
235
  await record({
174
236
  viewer: viewer.id,
175
237
  connection: connection.name,
238
+ ...(database ? { database } : {}),
176
239
  action: 'count',
177
240
  statement,
178
241
  durationMs: Math.round(performance.now() - started),
@@ -187,18 +250,19 @@ export function createDbAdmin(options) {
187
250
  path: '/api/rows',
188
251
  async run(request, viewer) {
189
252
  const body = await json(request);
190
- const { connection } = reach(viewer, body.connection);
253
+ const { connection, db, database } = reach(viewer, body.connection, body.database);
191
254
  const page = rowsRequest(body);
192
255
  const started = performance.now();
193
256
  const statement = `${page.schema}.${page.table}`;
194
257
  try {
195
- const result = await driver(connection).rows(page, {
258
+ const result = await db.rows(page, {
196
259
  timeoutMs: limits.timeoutMs,
197
260
  signal: request.signal,
198
261
  });
199
262
  await record({
200
263
  viewer: viewer.id,
201
264
  connection: connection.name,
265
+ ...(database ? { database } : {}),
202
266
  action: 'rows',
203
267
  statement,
204
268
  durationMs: result.durationMs,
@@ -210,6 +274,7 @@ export function createDbAdmin(options) {
210
274
  await record({
211
275
  viewer: viewer.id,
212
276
  connection: connection.name,
277
+ ...(database ? { database } : {}),
213
278
  action: 'rows',
214
279
  statement,
215
280
  durationMs: Math.round(performance.now() - started),
@@ -224,7 +289,7 @@ export function createDbAdmin(options) {
224
289
  path: '/api/query',
225
290
  async run(request, viewer) {
226
291
  const body = await json(request);
227
- const { connection, access } = reach(viewer, body.connection);
292
+ const { connection, access, db, database } = reach(viewer, body.connection, body.database);
228
293
  const sql = text(body.sql, 'sql');
229
294
  const maxRows = body.maxRows === undefined
230
295
  ? limits.maxRows
@@ -242,7 +307,7 @@ export function createDbAdmin(options) {
242
307
  }
243
308
  const started = performance.now();
244
309
  try {
245
- const result = await driver(connection).query(sql, {
310
+ const result = await db.query(sql, {
246
311
  access,
247
312
  maxRows,
248
313
  timeoutMs: limits.timeoutMs,
@@ -251,6 +316,7 @@ export function createDbAdmin(options) {
251
316
  await record({
252
317
  viewer: viewer.id,
253
318
  connection: connection.name,
319
+ ...(database ? { database } : {}),
254
320
  action: 'query',
255
321
  statement: sql,
256
322
  durationMs: result.durationMs,
@@ -262,6 +328,7 @@ export function createDbAdmin(options) {
262
328
  await record({
263
329
  viewer: viewer.id,
264
330
  connection: connection.name,
331
+ ...(database ? { database } : {}),
265
332
  action: 'query',
266
333
  statement: sql,
267
334
  durationMs: Math.round(performance.now() - started),
@@ -281,7 +348,7 @@ export function createDbAdmin(options) {
281
348
  path: '/api/apply',
282
349
  async run(request, viewer) {
283
350
  const body = await json(request);
284
- const { connection, access } = reach(viewer, body.connection);
351
+ const { connection, access, db, database } = reach(viewer, body.connection, body.database);
285
352
  const target = { schema: text(body.schema, 'schema'), table: text(body.table, 'table') };
286
353
  const changes = changesOf(body.changes);
287
354
  const dryRun = body.dryRun === true;
@@ -290,7 +357,7 @@ export function createDbAdmin(options) {
290
357
  }
291
358
  const started = performance.now();
292
359
  try {
293
- const result = await driver(connection).apply(target, changes, {
360
+ const result = await db.apply(target, changes, {
294
361
  timeoutMs: limits.timeoutMs,
295
362
  dryRun,
296
363
  });
@@ -298,6 +365,7 @@ export function createDbAdmin(options) {
298
365
  await record({
299
366
  viewer: viewer.id,
300
367
  connection: connection.name,
368
+ ...(database ? { database } : {}),
301
369
  action: 'apply',
302
370
  statement: result.statements.join(';\n'),
303
371
  durationMs: Math.round(performance.now() - started),
@@ -311,6 +379,7 @@ export function createDbAdmin(options) {
311
379
  await record({
312
380
  viewer: viewer.id,
313
381
  connection: connection.name,
382
+ ...(database ? { database } : {}),
314
383
  action: 'apply',
315
384
  statement: `${changes.length} changes to ${target.schema}.${target.table}`,
316
385
  durationMs: Math.round(performance.now() - started),
@@ -326,12 +395,11 @@ export function createDbAdmin(options) {
326
395
  path: '/api/export',
327
396
  async run(request, viewer) {
328
397
  const body = await json(request);
329
- const { connection } = reach(viewer, body.connection);
398
+ const { connection, db, database } = reach(viewer, body.connection, body.database);
330
399
  const format = formatOf(body.format);
331
400
  const page = rowsRequest({ ...body, limit: undefined, offset: undefined });
332
- const opened = driver(connection);
333
401
  const started = performance.now();
334
- const batches = opened.export(page, { timeoutMs: limits.timeoutMs });
402
+ const batches = db.export(page, { timeoutMs: limits.timeoutMs });
335
403
  // Read the first batch before answering, so a bad table or filter is a proper error.
336
404
  const first = await batches.next();
337
405
  let replayed = false;
@@ -344,9 +412,10 @@ export function createDbAdmin(options) {
344
412
  },
345
413
  return: async () => batches.return(undefined),
346
414
  };
347
- const stream = exportStream(format, replay, page, opened.sql, (rows, error) => void record({
415
+ const stream = exportStream(format, replay, page, db.sql, (rows, error) => void record({
348
416
  viewer: viewer.id,
349
417
  connection: connection.name,
418
+ ...(database ? { database } : {}),
350
419
  action: 'export',
351
420
  statement: `${page.schema}.${page.table} as ${format}`,
352
421
  durationMs: Math.round(performance.now() - started),
@@ -456,8 +525,9 @@ export function createDbAdmin(options) {
456
525
  return reply(404, { error: { code: 'not-found', message: 'Not found.' } });
457
526
  },
458
527
  async close() {
459
- const open = [...drivers.values()];
528
+ const open = [...drivers.values(), ...[...others.values()].flatMap((o) => [...o.values()])];
460
529
  drivers.clear();
530
+ others.clear();
461
531
  await Promise.all(open.map((d) => d.close()));
462
532
  },
463
533
  };
@@ -487,6 +557,18 @@ async function defaultUi() {
487
557
  const { assets } = (await import('@otwdesign/db-ui'));
488
558
  return assets;
489
559
  }
560
+ function oneDatabase(connection) {
561
+ return new DbAdminError(`Connection "${connection.name}" opens its own database only.`, 400, 'one-database');
562
+ }
563
+ /** A database's name as PostgreSQL takes it: up to 63 bytes, with no NUL. */
564
+ function databaseName(value) {
565
+ if (typeof value !== 'string' ||
566
+ value.includes('\0') ||
567
+ new TextEncoder().encode(value).length > MAX_DATABASE_NAME) {
568
+ throw bad('"database" is a database’s name.');
569
+ }
570
+ return value;
571
+ }
490
572
  function accessOf(viewer, connection) {
491
573
  const granted = viewer.access ? viewer.access(connection) : connection.access;
492
574
  if (!granted)
@@ -1 +1 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  export { connectionsFromEnv, driverKind } from './connections.ts';
2
- export { openDriver } from './drivers/index.ts';
2
+ export { openDriver, type DriverOptions } from './drivers/index.ts';
3
3
  export { backtick, mysqlDriver, mysqlLiteral } from './drivers/mysql.ts';
4
4
  export { sqliteDriver, sqliteLiteral, sqlitePath } from './drivers/sqlite.ts';
5
5
  export { pgliteDriver, type PGliteLike, type PGliteQueryable } from './drivers/pglite.ts';
6
- export { postgresDriver } from './drivers/postgres.ts';
6
+ export { postgresDriver, type PostgresModules, type PostgresOptions } from './drivers/postgres.ts';
7
7
  export { literal as literalPostgres, quote as quotePostgres } from './drivers/postgres-catalog.ts';
8
8
  export { ConnectionError, DbAdminError, QueryError } from './errors.ts';
9
9
  export { EXPORT_TYPES, exportStream, type ExportBatch } from './export.ts';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAyC,MAAM,qBAAqB,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAClG,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAoB,MAAM,aAAa,CAAA;AAC1E,OAAO,EACL,aAAa,EACb,WAAW,EACX,cAAc,GAIf,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAgC,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,UAAU,EAAsB,MAAM,oBAAoB,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAyC,MAAM,qBAAqB,CAAA;AACzF,OAAO,EAAE,cAAc,EAA8C,MAAM,uBAAuB,CAAA;AAClG,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAClG,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAoB,MAAM,aAAa,CAAA;AAC1E,OAAO,EACL,aAAa,EACb,WAAW,EACX,cAAc,GAIf,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAgC,MAAM,SAAS,CAAA"}
package/dist/types.d.ts CHANGED
@@ -18,6 +18,12 @@ export interface ConnectionConfig {
18
18
  tag?: ConnectionTag;
19
19
  /** Shown wherever people run SQL on it, such as what a heavy statement does to the host. */
20
20
  warning?: string;
21
+ /**
22
+ * Which of its server's databases it opens, where a connection opens one database at a time
23
+ * (PostgreSQL): `all`, the default, every one its login may connect to, the URL's first; `one`,
24
+ * the URL's only, for a login with more privileges than the tool should show.
25
+ */
26
+ databases?: 'all' | 'one';
21
27
  }
22
28
  /** A connection's environment, as a color: production red, staging orange, and so on. */
23
29
  export type ConnectionTag = 'local' | 'development' | 'testing' | 'staging' | 'production';
@@ -32,6 +38,11 @@ export interface Capabilities {
32
38
  * runs on the host's own thread.
33
39
  */
34
40
  cancel: boolean;
41
+ /**
42
+ * The server's other databases open from the connection, by name. The API sets it: a driver
43
+ * offers them with `databases()` and `withDatabase()`, and a connection may be pinned to its own.
44
+ */
45
+ databases?: boolean;
35
46
  }
36
47
  /** What a schema-tree entry is: SQLite and MySQL have tables and views, PostgreSQL the rest too. */
37
48
  export type TableKind = 'table' | 'view' | 'materialized-view' | 'foreign-table' | 'partitioned-table';
@@ -161,6 +172,13 @@ export interface ServerInfo {
161
172
  database: string;
162
173
  user: string;
163
174
  }
175
+ /** The databases a connection's login may open on its server, for the database picker. */
176
+ export interface DatabaseList {
177
+ /** The one the driver opened. */
178
+ current: string;
179
+ /** By name, the current one among them. */
180
+ databases: string[];
181
+ }
164
182
  /** How many rows one statement may send back, and how long it may run. */
165
183
  export interface Limits {
166
184
  /** Rows sent back at most; the rest are cut, and the result says so. */
@@ -209,6 +227,16 @@ export interface Driver {
209
227
  readonly sql: SqlDialect;
210
228
  /** One statement. */
211
229
  query(sql: string, options: QueryOptions): Promise<QueryResult>;
230
+ /**
231
+ * The server's databases its login may open, where a connection opens one at a time
232
+ * (PostgreSQL). Absent where it has one (SQLite) or shows the rest as schemas (MySQL).
233
+ */
234
+ databases?(): Promise<DatabaseList>;
235
+ /**
236
+ * A driver for another of the server's databases, with the same login and settings. It connects
237
+ * on first use; whoever asked for it closes it.
238
+ */
239
+ withDatabase?(name: string): Driver;
212
240
  close(): Promise<void>;
213
241
  }
214
242
  /** Who is asking, as the host's `authorize()` says. */
@@ -226,6 +254,8 @@ export interface AuditEvent {
226
254
  at: string;
227
255
  viewer: string;
228
256
  connection: string;
257
+ /** The database it ran on, when it wasn't the connection's own. */
258
+ database?: string;
229
259
  action: 'query' | 'rows' | 'count' | 'apply' | 'export' | 'cancel';
230
260
  /** The SQL run, or for `rows`, the table read. */
231
261
  statement: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@otwdesign/db-core",
3
- "version": "1.0.2",
3
+ "version": "1.2.0",
4
4
  "description": "A database manager's engine and HTTP API, as one Fetch handler: browse, query and inspect PostgreSQL, MySQL and SQLite from any app.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "OTW SRL",
@@ -52,7 +52,7 @@
52
52
  "NOTICE"
53
53
  ],
54
54
  "dependencies": {
55
- "@otwdesign/db-ui": "1.0.2"
55
+ "@otwdesign/db-ui": "1.2.0"
56
56
  },
57
57
  "peerDependencies": {
58
58
  "pg": "^8.11.0",
@@ -15,9 +15,10 @@ const SCHEMES: Record<string, DriverKind> = {
15
15
 
16
16
  /**
17
17
  * Connections from the environment: `DB_ADMIN_<NAME>_URL`, with `DB_ADMIN_<NAME>_ACCESS`
18
- * (`read`, the default, or `write`), `DB_ADMIN_<NAME>_LABEL` and `DB_ADMIN_<NAME>_TAG` (`local`,
19
- * `development`, `testing`, `staging` or `production`). `DB_ADMIN_SHOP_DATA_URL` becomes the
20
- * connection `shop-data`. Sorted by name; an empty URL is skipped.
18
+ * (`read`, the default, or `write`), `DB_ADMIN_<NAME>_LABEL`, `DB_ADMIN_<NAME>_TAG` (`local`,
19
+ * `development`, `testing`, `staging` or `production`) and `DB_ADMIN_<NAME>_DATABASES` (`all`, the
20
+ * default, or `one`: the URL's database only). `DB_ADMIN_SHOP_DATA_URL` becomes the connection
21
+ * `shop-data`. Sorted by name; an empty URL is skipped.
21
22
  */
22
23
  export function connectionsFromEnv(env: Env = process.env): ConnectionConfig[] {
23
24
  const connections: ConnectionConfig[] = []
@@ -29,12 +30,14 @@ export function connectionsFromEnv(env: Env = process.env): ConnectionConfig[] {
29
30
  driverKind(url, variable)
30
31
  const label = env[`${prefix}_LABEL`]?.trim()
31
32
  const tag = tagOf(env, `${prefix}_TAG`)
33
+ const databases = databasesOf(env, `${prefix}_DATABASES`)
32
34
  connections.push({
33
35
  name: match[1]!.toLowerCase().replaceAll('_', '-'),
34
36
  url,
35
37
  access: access(env, `${prefix}_ACCESS`),
36
38
  ...(label ? { label } : {}),
37
39
  ...(tag ? { tag } : {}),
40
+ ...(databases ? { databases } : {}),
38
41
  })
39
42
  }
40
43
  return connections.sort((a, b) => a.name.localeCompare(b.name))
@@ -46,6 +49,13 @@ function access(env: Env, variable: string): Access {
46
49
  throw new Error(`${variable} must be "read" or "write", not "${env[variable]}".`)
47
50
  }
48
51
 
52
+ function databasesOf(env: Env, variable: string): 'all' | 'one' | undefined {
53
+ const value = env[variable]?.trim()
54
+ if (!value) return undefined
55
+ if (value === 'all' || value === 'one') return value
56
+ throw new Error(`${variable} must be "all" or "one", not "${env[variable]}".`)
57
+ }
58
+
49
59
  function tagOf(env: Env, variable: string): ConnectionTag | undefined {
50
60
  const value = env[variable]?.trim()
51
61
  if (!value) return undefined
@@ -1,13 +1,19 @@
1
1
  import { driverKind } from '../connections.ts'
2
2
  import type { ConnectionConfig, Driver } from '../types.ts'
3
3
  import { mysqlDriver } from './mysql.ts'
4
- import { postgresDriver } from './postgres.ts'
4
+ import { postgresDriver, type PostgresOptions } from './postgres.ts'
5
5
  import { sqliteDriver } from './sqlite.ts'
6
6
 
7
+ /** What the drivers are given, by kind: PostgreSQL's packages, for one. */
8
+ export interface DriverOptions {
9
+ /** Where a PostgreSQL connection's pg and pg-cursor come from. */
10
+ postgres?: PostgresOptions
11
+ }
12
+
7
13
  /** The driver for a connection, by its URL's scheme. It connects on first use. */
8
- export function openDriver(connection: ConnectionConfig): Driver {
14
+ export function openDriver(connection: ConnectionConfig, options: DriverOptions = {}): Driver {
9
15
  const kind = driverKind(connection.url, `Connection "${connection.name}"`)
10
- if (kind === 'postgres') return postgresDriver(connection.url)
16
+ if (kind === 'postgres') return postgresDriver(connection.url, options.postgres)
11
17
  if (kind === 'mysql') return mysqlDriver(connection.url)
12
18
  return sqliteDriver(connection.url)
13
19
  }
@@ -79,6 +79,17 @@ export const TABLE_SQL = `SELECT n.nspname AS schema, c.relname AS name, c.relki
79
79
  export const INFO_SQL = `SELECT current_setting('server_version') AS version, current_database() AS database,
80
80
  current_user AS user`
81
81
 
82
+ /**
83
+ * The databases the login may connect to, the current one always among them: no templates, none
84
+ * that refuse connections, none a failed DROP DATABASE left invalid (a connection limit of -2).
85
+ */
86
+ export const DATABASES_SQL = `SELECT datname AS name, datname = current_database() AS current
87
+ FROM pg_database
88
+ WHERE datname = current_database()
89
+ OR (datallowconn AND NOT datistemplate AND datconnlimit <> -2
90
+ AND has_database_privilege(oid, 'CONNECT'))
91
+ ORDER BY lower(datname), datname`
92
+
82
93
  /** Names for type OIDs: $1 an array of them. */
83
94
  export const TYPE_NAMES_SQL =
84
95
  'SELECT oid::text AS oid, format_type(oid, NULL) AS name FROM pg_type WHERE oid = ANY($1::oid[])'