Skip to content

Conversation

@agherasim
Copy link

…sqlite

Please ensure you have read the contribution guide before creating a pull request.

Link to Issue or Description of Change

Problem:
aiosqlite library expects a relative or full path as connection parameter. Google ADK uses a protocol uri approach to select database driver, such as sqlite+aiosqlite:///<path> which results in an invalid file path.

Solution:
Stripping the protocol part sqlite+aiosqlite:/// results in a file path appropriate for aiosqlite.

Testing Plan

  1. Install google-adk v1.21.0
  2. Configure DatabaseSessionService with url sqlite+aiosqlite:///./sessions.db
  3. Run a fastapi instance and request a new session
  4. Initiate a new session. Operation should be successful.

Unit Tests:

  • I have added or updated unit tests for my change.
  • All unit tests pass locally.

Please include a summary of passed pytest results.

Manual End-to-End (E2E) Tests:

Please provide instructions on how to manually test your changes, including any
necessary setup or configuration. Please provide logs or screenshots to help
reviewers better understand the fix.

Checklist

  • I have read the CONTRIBUTING.md document.
  • I have performed a self-review of my own code.
  • I have commented my code, particularly in hard-to-understand areas.
  • I have added tests that prove my fix is effective or that my feature works.
  • New and existing unit tests pass locally with my changes.
  • I have manually tested my changes end-to-end.
  • Any dependent changes have been merged and published in downstream modules.

Additional context

Add any other context or screenshots about the feature request here.

@google-cla
Copy link

google-cla bot commented Jan 6, 2026

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @agherasim, 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 resolves a critical compatibility issue where the aiosqlite library, responsible for SQLite database connections, failed to interpret the database connection string provided by Google ADK. The ADK's URI-like format, which included a protocol prefix, was incompatible with aiosqlite's expectation of a direct file path. The implemented change programmatically removes this prefix, enabling aiosqlite to establish connections successfully and ensuring proper database operation for session management within the application.

Highlights

  • Database Connection Path Handling: Modified the _get_db_connection method in sqlite_session_service.py to strip the sqlite+aiosqlite:/// prefix from the database path. This ensures that the aiosqlite library receives a valid file path, resolving an issue where the URI-based approach used by Google ADK caused connection failures.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

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.

@adk-bot
Copy link
Collaborator

adk-bot commented Jan 6, 2026

Response from ADK Triaging Agent

Hello @agherasim, thank you for creating this PR!

Before we can proceed with the review, could you please address the following points from our contribution guidelines:

  • Sign our Contributor License Agreement: The CLA check is currently failing. Please visit https://cla.developers.google.com/ to sign the agreement.
  • Unit Tests: Could you please add or update the unit tests for your change and include a summary of the passed pytest results?
  • Manual End-to-End (E2E) Tests: For bug fixes, it's helpful for reviewers if you can provide logs or screenshots demonstrating that the fix works as expected.

This information will help us to review and merge your contribution more efficiently. Thanks!

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

This pull request addresses an issue where aiosqlite receives a database URI instead of a file path. The proposed change strips the protocol prefix to resolve this. My review identifies two points for improvement. First, for robustness, str.removeprefix() should be preferred over str.replace() for removing the prefix. Second, and more critically, the fix is incomplete. A similar issue exists in the __init__ method where _is_migration_needed is called, which will cause the service to fail on initialization when a URI is provided. The path stripping logic should be centralized in __init__ to ensure all methods use the correct file path.

Comment on lines +418 to +420
# aiosqlite requires a file path
path = self._db_path.replace("sqlite+aiosqlite:///", "")
async with aiosqlite.connect(path) as db:
Copy link
Contributor

Choose a reason for hiding this comment

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

high

While this change correctly handles the database path for aiosqlite.connect, a similar issue exists in the __init__ method. The _is_migration_needed method is called from __init__ and it internally uses os.path.exists(self._db_path) and sqlite3.connect(self._db_path). Both of these will fail if self._db_path is a URI like sqlite+aiosqlite:///..., causing a RuntimeError during the initialization of SqliteSessionService before this method is ever called.

To resolve this, the path stripping logic should be applied in __init__ so that self._db_path holds the clean file path throughout the object's lifecycle.

"""Connects to the db and performs initial setup."""
async with aiosqlite.connect(self._db_path) as db:
# aiosqlite requires a file path
path = self._db_path.replace("sqlite+aiosqlite:///", "")
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

Using str.replace() for removing a prefix can be less robust than alternatives. For removing a prefix, it's more idiomatic and safer to use str.removeprefix() (available in Python 3.9+). Given the modern Python features used elsewhere in the codebase, removeprefix is likely available and is the cleanest option.

Suggested change
path = self._db_path.replace("sqlite+aiosqlite:///", "")
path = self._db_path.removeprefix("sqlite+aiosqlite:///")

@ryanaiagent ryanaiagent self-assigned this Jan 7, 2026
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.

sqlite+aiosqlite implementation cannot open database file

3 participants