orez 0.4.57 → 0.4.59

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.
@@ -1 +1 @@
1
- {"version":3,"file":"pg-proxy-do-backend.d.ts","sourceRoot":"","sources":["../src/pg-proxy-do-backend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pg-proxy-do-backend.d.ts","sourceRoot":"","sources":["../src/pg-proxy-do-backend.ts"],"names":[],"mappings":"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"}
@@ -6536,92 +6536,102 @@ export class DoBackend {
6536
6536
  if (!selectReferencesTable(select, 'columns'))
6537
6537
  return null;
6538
6538
  const fields = selectTargetFields(select);
6539
+ const zeroServerSchemaQuery = ['schema', 'table', 'column', 'dataType'].every((name) => fields.some((field) => field.name === name));
6539
6540
  let rows = [];
6540
- for (let attempt = 0; attempt < 2; attempt++) {
6541
- const infos = await this.publicationTableInfos();
6542
- rows = [];
6543
- for (const info of infos) {
6544
- for (const column of info.columns) {
6545
- const metadata = this.schemaMetadata.get(info.name)?.get(column.name);
6546
- const dataType = pgTypeForSqliteColumn(column, metadata);
6547
- const baseDataType = dataType.endsWith('[]') ? dataType.slice(0, -2) : dataType;
6548
- const row = {
6549
- table_schema: info.schema,
6550
- table_name: info.tableName,
6551
- column_name: column.name,
6552
- data_type: metadata?.elemTypname ? 'ARRAY' : baseDataType,
6553
- udt_name: metadata?.typname ??
6554
- (dataType.endsWith('[]') ? `_${baseDataType}` : baseDataType),
6555
- character_maximum_length: metadata?.characterMaximumLength ?? null,
6556
- numeric_precision: metadata?.numericPrecision ?? null,
6557
- numeric_scale: metadata?.numericScale ?? null,
6558
- typtype: metadata?.typtype ?? 'b',
6559
- typname: metadata?.typname ??
6560
- (dataType.endsWith('[]') ? `_${baseDataType}` : baseDataType),
6561
- elemTyptype: metadata?.elemTyptype ?? null,
6562
- elemTypname: metadata?.elemTypname ?? null,
6563
- schema: info.schema,
6564
- table: info.tableName,
6565
- column: column.name,
6566
- dataType: metadata?.elemTypname ? 'ARRAY' : baseDataType,
6567
- length: metadata?.characterMaximumLength ?? null,
6568
- precision: metadata?.numericPrecision ?? null,
6569
- scale: metadata?.numericScale ?? null,
6570
- typename: metadata?.typname ??
6571
- (dataType.endsWith('[]') ? `_${baseDataType}` : baseDataType),
6572
- };
6573
- if (catalogWhereMatches(select.whereClause, row)) {
6574
- rows.push(this.projectCatalogRow(fields, row));
6541
+ let matchedColumns = new Set();
6542
+ if (!zeroServerSchemaQuery) {
6543
+ for (let attempt = 0; attempt < 2; attempt++) {
6544
+ const infos = await this.publicationTableInfos();
6545
+ rows = [];
6546
+ matchedColumns = new Set();
6547
+ for (const info of infos) {
6548
+ for (const column of info.columns) {
6549
+ const metadata = this.schemaMetadata.get(info.name)?.get(column.name);
6550
+ const dataType = pgTypeForSqliteColumn(column, metadata);
6551
+ const baseDataType = dataType.endsWith('[]')
6552
+ ? dataType.slice(0, -2)
6553
+ : dataType;
6554
+ const row = {
6555
+ table_schema: info.schema,
6556
+ table_name: info.tableName,
6557
+ column_name: column.name,
6558
+ data_type: metadata?.elemTypname ? 'ARRAY' : baseDataType,
6559
+ udt_name: metadata?.typname ??
6560
+ (dataType.endsWith('[]') ? `_${baseDataType}` : baseDataType),
6561
+ character_maximum_length: metadata?.characterMaximumLength ?? null,
6562
+ numeric_precision: metadata?.numericPrecision ?? null,
6563
+ numeric_scale: metadata?.numericScale ?? null,
6564
+ typtype: metadata?.typtype ?? 'b',
6565
+ typname: metadata?.typname ??
6566
+ (dataType.endsWith('[]') ? `_${baseDataType}` : baseDataType),
6567
+ elemTyptype: metadata?.elemTyptype ?? null,
6568
+ elemTypname: metadata?.elemTypname ?? null,
6569
+ schema: info.schema,
6570
+ table: info.tableName,
6571
+ column: column.name,
6572
+ dataType: metadata?.elemTypname ? 'ARRAY' : baseDataType,
6573
+ length: metadata?.characterMaximumLength ?? null,
6574
+ precision: metadata?.numericPrecision ?? null,
6575
+ scale: metadata?.numericScale ?? null,
6576
+ typename: metadata?.typname ??
6577
+ (dataType.endsWith('[]') ? `_${baseDataType}` : baseDataType),
6578
+ };
6579
+ if (catalogWhereMatches(select.whereClause, row)) {
6580
+ rows.push(this.projectCatalogRow(fields, row));
6581
+ matchedColumns.add(`${info.schema}\u0000${info.tableName}\u0000${column.name}`);
6582
+ }
6575
6583
  }
6576
6584
  }
6585
+ if (rows.length > 0 || attempt === 1)
6586
+ break;
6587
+ // A different backend can provision the app tables after this instance
6588
+ // cached only Zero's internal shard tables. One forced refresh on an
6589
+ // otherwise empty information-schema answer heals that non-empty stale
6590
+ // cache without turning every healthy catalog query into a full scan.
6591
+ this.publicationTableInfoCache = null;
6577
6592
  }
6578
- if (rows.length > 0 || attempt === 1)
6579
- break;
6580
- // A different backend can provision the app tables after this instance
6581
- // cached only Zero's internal shard tables. One forced refresh on an
6582
- // otherwise empty information-schema answer heals that non-empty stale
6583
- // cache without turning every healthy catalog query into a full scan.
6584
- this.publicationTableInfoCache = null;
6585
6593
  }
6586
- if (rows.length === 0) {
6587
- // Large, out-of-band migrations can leave this backend with a partial
6588
- // PRAGMA catalog even after the one-shot rescan above. Durable schema
6589
- // metadata is written in the same SQL DO as the physical tables, so use
6590
- // it as the final information-schema source while still requiring the
6591
- // physical table to exist. This keeps schema validation honest if stale
6592
- // metadata survives a real DROP TABLE.
6593
- await this.reloadSchemaMetadataIfEmpty(true);
6594
- const physicalTables = new Set((await this.listSqliteTables()).map((table) => table.name));
6595
- for (const [tableName, columns] of this.schemaMetadata) {
6596
- if (!physicalTables.has(tableName))
6597
- continue;
6598
- for (const [columnName, metadata] of columns) {
6599
- const dataType = metadata.elemTypname ? 'ARRAY' : metadata.dataType;
6600
- const row = {
6601
- table_schema: metadata.schema,
6602
- table_name: metadata.tableName,
6603
- column_name: columnName,
6604
- data_type: dataType,
6605
- udt_name: metadata.typname,
6606
- character_maximum_length: metadata.characterMaximumLength ?? null,
6607
- numeric_precision: metadata.numericPrecision ?? null,
6608
- numeric_scale: metadata.numericScale ?? null,
6609
- typtype: metadata.typtype,
6610
- typname: metadata.typname,
6611
- elemTyptype: metadata.elemTyptype ?? null,
6612
- elemTypname: metadata.elemTypname ?? null,
6613
- schema: metadata.schema,
6614
- table: metadata.tableName,
6615
- column: columnName,
6616
- dataType,
6617
- length: metadata.characterMaximumLength ?? null,
6618
- precision: metadata.numericPrecision ?? null,
6619
- scale: metadata.numericScale ?? null,
6620
- typename: metadata.typname,
6621
- };
6622
- if (catalogWhereMatches(select.whereClause, row)) {
6623
- rows.push(this.projectCatalogRow(fields, row));
6624
- }
6594
+ // A large out-of-band migration can leave the PRAGMA-derived catalog
6595
+ // partially populated, which is more dangerous than an empty cache because
6596
+ // a zero-row retry never fires. Durable schema metadata is written in the
6597
+ // same SQL DO as the physical tables, so make it authoritative for column
6598
+ // introspection while still requiring each physical table to exist. This
6599
+ // keeps schema validation honest if stale metadata survives a real DROP.
6600
+ await this.reloadSchemaMetadataIfEmpty(zeroServerSchemaQuery);
6601
+ const physicalTables = new Set((await this.listSqliteTables()).map((table) => table.name));
6602
+ for (const [tableName, columns] of this.schemaMetadata) {
6603
+ if (!physicalTables.has(tableName))
6604
+ continue;
6605
+ for (const [columnName, metadata] of columns) {
6606
+ const dataType = metadata.elemTypname ? 'ARRAY' : metadata.dataType;
6607
+ const row = {
6608
+ table_schema: metadata.schema,
6609
+ table_name: metadata.tableName,
6610
+ column_name: columnName,
6611
+ data_type: dataType,
6612
+ udt_name: metadata.typname,
6613
+ character_maximum_length: metadata.characterMaximumLength ?? null,
6614
+ numeric_precision: metadata.numericPrecision ?? null,
6615
+ numeric_scale: metadata.numericScale ?? null,
6616
+ typtype: metadata.typtype,
6617
+ typname: metadata.typname,
6618
+ elemTyptype: metadata.elemTyptype ?? null,
6619
+ elemTypname: metadata.elemTypname ?? null,
6620
+ schema: metadata.schema,
6621
+ table: metadata.tableName,
6622
+ column: columnName,
6623
+ dataType,
6624
+ length: metadata.characterMaximumLength ?? null,
6625
+ precision: metadata.numericPrecision ?? null,
6626
+ scale: metadata.numericScale ?? null,
6627
+ typename: metadata.typname,
6628
+ };
6629
+ if (zeroServerSchemaQuery || catalogWhereMatches(select.whereClause, row)) {
6630
+ const key = `${metadata.schema}\u0000${metadata.tableName}\u0000${columnName}`;
6631
+ if (matchedColumns.has(key))
6632
+ continue;
6633
+ rows.push(this.projectCatalogRow(fields, row));
6634
+ matchedColumns.add(key);
6625
6635
  }
6626
6636
  }
6627
6637
  }