Skip to content

postgres - feat: moving to properties#1858

Merged
jaredwray merged 5 commits intomainfrom
postgres---feat-moving-to-properties
Feb 22, 2026
Merged

postgres - feat: moving to properties#1858
jaredwray merged 5 commits intomainfrom
postgres---feat-moving-to-properties

Conversation

@jaredwray
Copy link
Owner

@jaredwray jaredwray commented Feb 22, 2026

Please check if the PR fulfills these requirements

  • Followed the Contributing and Code of Conduct guidelines.
  • Tests for the changes have been added (for bug fixes/features) with 100% code coverage.

What kind of change does this PR introduce? (Bug fix, feature, docs update, ...)
postgres - feat: moving to properties

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @jaredwray, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly refactors the KeyvPostgres adapter by transitioning its configuration management from a monolithic opts object to a more modular system of individual private properties with corresponding public getters and setters. This change aims to improve code clarity, maintainability, and provide more explicit control over each configuration aspect, while ensuring backward compatibility through an opts getter/setter that aggregates these properties.

Highlights

  • Configuration Refactoring: The KeyvPostgres class has been refactored to manage its configuration options using individual private properties (e.g., _uri, _table, _schema) instead of a single opts object. Public getters and setters have been introduced for these properties.
  • Improved Encapsulation: This change enhances encapsulation by providing granular control over each configuration setting and clarifying default values directly within the class definition.
  • Updated Constructor Logic: The constructor now directly initializes these new properties, and a setOptions private method handles the parsing and assignment of configuration from the constructor's options object or URI string.
  • Comprehensive Testing: New test cases have been added to validate the default values, constructor option assignments, individual property setters/getters, and the behavior of the opts getter/setter for compatibility.
Changelog
  • storage/postgres/src/index.ts
    • Removed the opts property from the KeyvPostgres class.
    • Introduced individual private properties for _uri, _table, _keySize, _schema, _ssl, _dialect, _iterationLimit, _useUnloggedTable, and _poolConfig.
    • Added public getters and setters for each of the newly introduced private configuration properties.
    • Modified the constructor to directly initialize these properties based on provided options or URI string.
    • Implemented a private setOptions method to handle the assignment of configuration values.
    • Updated all internal SQL query constructions and logic to reference the new private properties instead of the deprecated this.opts.
  • storage/postgres/src/types.ts
    • Removed several unused type exports including IteratorOutput, GetOutput, GetManyOutput, SetOutput, DeleteOutput, DeleteManyOutput, ClearOutput, HasOutput, and DisconnectOutput.
    • Removed the StoredData import as it is no longer directly used in this file.
  • storage/postgres/test/test.ts
    • Added new test cases to verify the correct default values for all new configuration properties.
    • Included tests to confirm that properties are correctly initialized when passed through the constructor options.
    • Added a test specifically for setting the URI via a string in the constructor.
    • Implemented tests to ensure individual property getters and setters function as expected.
    • Created tests for the opts getter to confirm it returns an aggregated object of current property values.
    • Added tests for the opts setter to verify it correctly updates individual properties.
Activity
  • The author has confirmed adherence to the project's contributing guidelines and code of conduct.
  • The pull request introduces a new feature related to configuration management in the PostgreSQL storage adapter.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

The pull request refactors the KeyvPostgres class to use private properties with getters and setters instead of a single opts object. This improves encapsulation and provides more granular control over configuration options. The changes also include updating the constructor logic and SQL queries to use these new properties. New tests have been added to verify the correct behavior of the properties.

Comment on lines 204 to 205
// biome-ignore lint/suspicious/noExplicitAny: type format
public get ssl(): any {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The // biome-ignore comment for ssl is still present, but the type any is still being used. It would be better to define a more specific type for ssl if possible, or at least provide a more descriptive reason for using any.

	public get ssl(): any {

Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 35d3058edc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

namespace?: string,
): AsyncGenerator<[string, string], void, unknown> {
const limit = Number.parseInt(String(this.opts.iterationLimit!), 10) || 10;
const limit = this._iterationLimit;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Reintroduce iterator limit fallback

iterator() now uses this._iterationLimit directly, but the previous implementation normalized with parseInt(...) || 10. If callers pass iterationLimit: 0, NaN, or another invalid runtime value (common with untyped JS/env-driven config), the query will run with a zero/invalid LIMIT, so iteration can silently return no rows or fail instead of using the default batch size. This is a behavior regression that can cause missed keys during iteration.

Useful? React with 👍 / 👎.

@codecov
Copy link

codecov bot commented Feb 22, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.95%. Comparing base (d66d9ff) to head (7ba83bc).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #1858   +/-   ##
=======================================
  Coverage   99.95%   99.95%           
=======================================
  Files          32       32           
  Lines        2439     2493   +54     
  Branches      439      446    +7     
=======================================
+ Hits         2438     2492   +54     
  Misses          1        1           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@jaredwray jaredwray merged commit 73c7a85 into main Feb 22, 2026
10 checks passed
@jaredwray jaredwray deleted the postgres---feat-moving-to-properties branch February 22, 2026 04:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant