Skip to content

Conversation

@jankuca
Copy link
Member

@jankuca jankuca commented Nov 2, 2025

Summary by CodeRabbit

  • New Features

    • Added UI forms and configuration support for many new SQL/NoSQL integrations (MySQL, MariaDB, AlloyDB, ClickHouse, Materialize, MindsDB, SQL Server, Trino, Athena, Databricks, Dremio, MongoDB, Redshift, Spanner, etc.) and expanded localization.
  • Improved UX

    • Added SSH and CA/SSL options in forms, Spanner service-account validation, clearer auth flows, and removed internal dataframe/DuckDB from visible integrations.
  • Documentation

    • Updated integration docs with supported-types list, env-var examples, and auth guidance.
  • Other

    • Connection label changed from “Username” to “User”.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 2, 2025

📝 Walkthrough

Walkthrough

This PR expands supported database integrations (≈18 types), adds per-type metadata schemas and React configuration forms, renames PostgreSQL/SQL-like field usernameuser, introduces ConfigurableDatabaseIntegrationType/ConfigurableDatabaseIntegrationConfig (excludes internal 'pandas-dataframe'), tightens typing across detectors/storage/webview/messages, adds SSH and CA-certificate subforms and many localization keys, updates cspell, and skips the internal dataframe integration from UI flows. Changes are primarily types, docs, forms, and UI wiring.

Sequence Diagram(s)

sequenceDiagram
    autonumber
    participant User
    participant Webview as Integration Webview
    participant Detector as Integration Detector
    participant Router as ConfigurationForm
    participant Form as Type-specific Form
    participant Storage as IntegrationStorage

    Note right of Detector: Detector filters out 'pandas-dataframe' → Configurable types only

    User->>Webview: Open integrations panel
    Webview->>Detector: Request project integrations
    Detector-->>Webview: IntegrationWithStatus[] (ConfigurableDatabaseIntegrationType)
    Webview->>Router: Render list + localization (expanded types)
    User->>Router: Select integration type (e.g., mysql)
    Router->>Form: Render corresponding Form component
    alt type == pandas-dataframe
        Router-->>User: Skip form / not shown
    else
        User->>Form: Fill & submit
        Form->>Storage: save(ConfigurableDatabaseIntegrationConfig)
        Storage-->>Webview: Saved / cached
        Webview-->>User: Save confirmation
    end
Loading

Possibly related PRs

Suggested reviewers

  • Artmann
  • saltenasl
  • jamesbhobbs

Pre-merge checks

✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The PR title "feat: support for all database integrations" directly aligns with the main objective of this changeset. The raw summary confirms the PR expands support from a limited set of integrations to approximately 18 database types (MySQL, MariaDB, AlloyDB, ClickHouse, Materialize, MindsDB, SQL Server, Trino, Athena, Databricks, Dremio, MongoDB, Redshift, Spanner, and others). The title is concise, uses clear language, and accurately describes the feature addition without unnecessary noise. While it doesn't enumerate every integration type added, that level of detail is not expected per standard PR title conventions.

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between ebf0c26 and 03c3649.

📒 Files selected for processing (1)
  • src/platform/notebooks/deepnote/sqlIntegrationEnvironmentVariablesProvider.ts (2 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/!(*.node|*.web).ts

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Place shared cross-platform logic in common .ts files (not suffixed with .node or .web)

Files:

  • src/platform/notebooks/deepnote/sqlIntegrationEnvironmentVariablesProvider.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.{ts,tsx}: Inject interfaces, not concrete classes
Avoid circular dependencies
Use l10n.t() for user-facing strings
Use typed error classes from src/platform/errors/ when throwing or handling errors
Use the ILogger service instead of console.log
Preserve error details while scrubbing PII in messages and telemetry
Include the Microsoft copyright header in source files
Prefer async/await and handle cancellation with CancellationToken

Files:

  • src/platform/notebooks/deepnote/sqlIntegrationEnvironmentVariablesProvider.ts
src/platform/**/*.ts

📄 CodeRabbit inference engine (.github/instructions/platform.instructions.md)

src/platform/**/*.ts: Use Inversify decorators for DI: annotate classes with @Injectable() and inject dependencies with @Inject(Token)
Use the centralized logger (import { logger } from '../platform/logging') instead of console.log for application logging

Files:

  • src/platform/notebooks/deepnote/sqlIntegrationEnvironmentVariablesProvider.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Build & Test
🔇 Additional comments (1)
src/platform/notebooks/deepnote/sqlIntegrationEnvironmentVariablesProvider.ts (1)

14-14: LGTM: Import addition for type annotation.

The DatabaseIntegrationConfig import is correctly added and used at line 91.


Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link

codecov bot commented Nov 2, 2025

Codecov Report

❌ Patch coverage is 93.66516% with 14 lines in your changes missing coverage. Please review.
✅ Project coverage is 73%. Comparing base (4e02acf) to head (03c3649).
⚠️ Report is 1 commits behind head on main.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
src/notebooks/deepnote/sqlCellStatusBarProvider.ts 22% 14 Missing ⚠️
Additional details and impacted files
@@          Coverage Diff           @@
##            main    #160    +/-   ##
======================================
  Coverage     73%     73%            
======================================
  Files        552     552            
  Lines      44283   44488   +205     
  Branches    5313    5314     +1     
======================================
+ Hits       32517   32708   +191     
- Misses     10003   10017    +14     
  Partials    1763    1763            
Files with missing lines Coverage Δ
src/messageTypes.ts 100% <ø> (ø)
...ooks/deepnote/deepnoteNotebookManager.unit.test.ts 100% <100%> (ø)
src/notebooks/types.ts 100% <ø> (ø)
src/platform/common/utils/localize.ts 91% <100%> (+2%) ⬆️
.../platform/notebooks/deepnote/integrationStorage.ts 85% <100%> (ø)
...notebooks/deepnote/integrationStorage.unit.test.ts 100% <100%> (ø)
...rc/platform/notebooks/deepnote/integrationTypes.ts 100% <ø> (ø)
...note/sqlIntegrationEnvironmentVariablesProvider.ts 95% <100%> (ø)
src/platform/notebooks/deepnote/types.ts 100% <ø> (ø)
src/notebooks/deepnote/sqlCellStatusBarProvider.ts 87% <22%> (-8%) ⬇️
🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@jankuca jankuca force-pushed the jk/all-db-integrations branch from c4e789b to cf5262d Compare November 2, 2025 14:32
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 8

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
src/platform/notebooks/deepnote/sqlIntegrationEnvironmentVariablesProvider.ts (1)

1-1: Missing Microsoft copyright header.

Add the required copyright header per coding guidelines.

As per coding guidelines.

src/notebooks/deepnote/integrations/integrationManager.ts (1)

164-174: Don't bail out when type is pandas-dataframe.

Returning here aborts Manage Integrations entirely, so other integrations never render when this guard trips. Just skip adding the internal entry and carry on.

-            if (integrationType === 'pandas-dataframe') {
-                logger.debug(`IntegrationManager: Skipping internal DuckDB integration ${selectedIntegrationId}`);
-                return;
-            }
-
-            integrations.set(selectedIntegrationId, {
-                config: config || null,
-                status: config ? IntegrationStatus.Connected : IntegrationStatus.Disconnected,
-                integrationName,
-                integrationType
-            });
+            if (integrationType === 'pandas-dataframe') {
+                logger.debug(`IntegrationManager: Skipping internal DuckDB integration ${selectedIntegrationId}`);
+            } else {
+                integrations.set(selectedIntegrationId, {
+                    config: config || null,
+                    status: config ? IntegrationStatus.Connected : IntegrationStatus.Disconnected,
+                    integrationName,
+                    integrationType
+                });
+            }
📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 58c86b6 and cf5262d.

📒 Files selected for processing (33)
  • INTEGRATIONS_CREDENTIALS.md (6 hunks)
  • cspell.json (3 hunks)
  • src/messageTypes.ts (2 hunks)
  • src/notebooks/deepnote/deepnoteNotebookManager.unit.test.ts (5 hunks)
  • src/notebooks/deepnote/integrations/integrationDetector.ts (3 hunks)
  • src/notebooks/deepnote/integrations/integrationManager.ts (1 hunks)
  • src/notebooks/deepnote/integrations/integrationWebview.ts (5 hunks)
  • src/notebooks/deepnote/sqlCellStatusBarProvider.ts (3 hunks)
  • src/notebooks/types.ts (2 hunks)
  • src/platform/common/utils/localize.ts (2 hunks)
  • src/platform/notebooks/deepnote/integrationStorage.ts (6 hunks)
  • src/platform/notebooks/deepnote/integrationStorage.unit.test.ts (2 hunks)
  • src/platform/notebooks/deepnote/integrationTypes.ts (3 hunks)
  • src/platform/notebooks/deepnote/sqlIntegrationEnvironmentVariablesProvider.ts (2 hunks)
  • src/platform/notebooks/deepnote/types.ts (3 hunks)
  • src/webviews/webview-side/integrations/AlloyDBForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/AthenaForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/ClickHouseForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/ConfigurationForm.tsx (2 hunks)
  • src/webviews/webview-side/integrations/DatabricksForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/DremioForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/IntegrationItem.tsx (1 hunks)
  • src/webviews/webview-side/integrations/IntegrationPanel.tsx (3 hunks)
  • src/webviews/webview-side/integrations/MariaDBForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MaterializeForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MindsDBForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MongoDBForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MySQLForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/RedshiftForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/SQLServerForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/SpannerForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/TrinoForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/types.ts (2 hunks)
🧰 Additional context used
📓 Path-based instructions (5)
**/!(*.node|*.web).ts

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Place shared cross-platform logic in common .ts files (not suffixed with .node or .web)

Files:

  • src/notebooks/types.ts
  • src/platform/notebooks/deepnote/integrationStorage.unit.test.ts
  • src/platform/notebooks/deepnote/integrationTypes.ts
  • src/platform/notebooks/deepnote/sqlIntegrationEnvironmentVariablesProvider.ts
  • src/notebooks/deepnote/integrations/integrationManager.ts
  • src/webviews/webview-side/integrations/types.ts
  • src/notebooks/deepnote/sqlCellStatusBarProvider.ts
  • src/platform/notebooks/deepnote/types.ts
  • src/notebooks/deepnote/deepnoteNotebookManager.unit.test.ts
  • src/platform/notebooks/deepnote/integrationStorage.ts
  • src/notebooks/deepnote/integrations/integrationWebview.ts
  • src/notebooks/deepnote/integrations/integrationDetector.ts
  • src/messageTypes.ts
  • src/platform/common/utils/localize.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.{ts,tsx}: Inject interfaces, not concrete classes
Avoid circular dependencies
Use l10n.t() for user-facing strings
Use typed error classes from src/platform/errors/ when throwing or handling errors
Use the ILogger service instead of console.log
Preserve error details while scrubbing PII in messages and telemetry
Include the Microsoft copyright header in source files
Prefer async/await and handle cancellation with CancellationToken

Files:

  • src/notebooks/types.ts
  • src/platform/notebooks/deepnote/integrationStorage.unit.test.ts
  • src/platform/notebooks/deepnote/integrationTypes.ts
  • src/platform/notebooks/deepnote/sqlIntegrationEnvironmentVariablesProvider.ts
  • src/webviews/webview-side/integrations/RedshiftForm.tsx
  • src/webviews/webview-side/integrations/AthenaForm.tsx
  • src/webviews/webview-side/integrations/SQLServerForm.tsx
  • src/notebooks/deepnote/integrations/integrationManager.ts
  • src/webviews/webview-side/integrations/types.ts
  • src/webviews/webview-side/integrations/ClickHouseForm.tsx
  • src/webviews/webview-side/integrations/AlloyDBForm.tsx
  • src/webviews/webview-side/integrations/IntegrationItem.tsx
  • src/notebooks/deepnote/sqlCellStatusBarProvider.ts
  • src/webviews/webview-side/integrations/SpannerForm.tsx
  • src/webviews/webview-side/integrations/DremioForm.tsx
  • src/platform/notebooks/deepnote/types.ts
  • src/webviews/webview-side/integrations/MindsDBForm.tsx
  • src/notebooks/deepnote/deepnoteNotebookManager.unit.test.ts
  • src/webviews/webview-side/integrations/TrinoForm.tsx
  • src/webviews/webview-side/integrations/MaterializeForm.tsx
  • src/webviews/webview-side/integrations/MySQLForm.tsx
  • src/platform/notebooks/deepnote/integrationStorage.ts
  • src/notebooks/deepnote/integrations/integrationWebview.ts
  • src/webviews/webview-side/integrations/MariaDBForm.tsx
  • src/webviews/webview-side/integrations/IntegrationPanel.tsx
  • src/webviews/webview-side/integrations/MongoDBForm.tsx
  • src/notebooks/deepnote/integrations/integrationDetector.ts
  • src/webviews/webview-side/integrations/ConfigurationForm.tsx
  • src/webviews/webview-side/integrations/DatabricksForm.tsx
  • src/messageTypes.ts
  • src/platform/common/utils/localize.ts
**/*.unit.test.ts

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Place unit tests in files matching *.unit.test.ts

Files:

  • src/platform/notebooks/deepnote/integrationStorage.unit.test.ts
  • src/notebooks/deepnote/deepnoteNotebookManager.unit.test.ts
src/platform/**/*.ts

📄 CodeRabbit inference engine (.github/instructions/platform.instructions.md)

src/platform/**/*.ts: Use Inversify decorators for DI: annotate classes with @Injectable() and inject dependencies with @Inject(Token)
Use the centralized logger (import { logger } from '../platform/logging') instead of console.log for application logging

Files:

  • src/platform/notebooks/deepnote/integrationStorage.unit.test.ts
  • src/platform/notebooks/deepnote/integrationTypes.ts
  • src/platform/notebooks/deepnote/sqlIntegrationEnvironmentVariablesProvider.ts
  • src/platform/notebooks/deepnote/types.ts
  • src/platform/notebooks/deepnote/integrationStorage.ts
  • src/platform/common/utils/localize.ts
**/*.{test,spec}.ts

📄 CodeRabbit inference engine (.github/instructions/typescript.instructions.md)

In unit tests, when a mock is returned from a promise, ensure the mocked instance has an undefined then property to avoid hanging tests

Files:

  • src/platform/notebooks/deepnote/integrationStorage.unit.test.ts
  • src/notebooks/deepnote/deepnoteNotebookManager.unit.test.ts
🧬 Code graph analysis (27)
src/notebooks/types.ts (2)
src/platform/notebooks/deepnote/integrationTypes.ts (1)
  • ConfigurableDatabaseIntegrationType (144-144)
src/webviews/webview-side/integrations/types.ts (1)
  • ConfigurableDatabaseIntegrationType (3-3)
src/platform/notebooks/deepnote/integrationTypes.ts (1)
src/webviews/webview-side/integrations/types.ts (2)
  • ConfigurableDatabaseIntegrationConfig (5-5)
  • ConfigurableDatabaseIntegrationType (3-3)
src/webviews/webview-side/integrations/RedshiftForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/AthenaForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SQLServerForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/notebooks/deepnote/integrations/integrationManager.ts (1)
src/platform/logging/index.ts (1)
  • logger (35-48)
src/webviews/webview-side/integrations/types.ts (1)
src/platform/notebooks/deepnote/integrationTypes.ts (3)
  • ConfigurableDatabaseIntegrationType (144-144)
  • ConfigurableDatabaseIntegrationConfig (139-142)
  • IntegrationWithStatus (158-170)
src/webviews/webview-side/integrations/ClickHouseForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/AlloyDBForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/IntegrationItem.tsx (4)
src/platform/notebooks/deepnote/integrationTypes.ts (2)
  • IntegrationWithStatus (158-170)
  • ConfigurableDatabaseIntegrationType (144-144)
src/webviews/webview-side/integrations/types.ts (2)
  • IntegrationWithStatus (9-15)
  • ConfigurableDatabaseIntegrationType (3-3)
src/notebooks/deepnote/sqlCellStatusBarProvider.ts (1)
  • getIntegrationTypeLabel (441-480)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/notebooks/deepnote/sqlCellStatusBarProvider.ts (1)
src/platform/notebooks/deepnote/integrationTypes.ts (2)
  • DATAFRAME_SQL_INTEGRATION_ID (5-5)
  • ConfigurableDatabaseIntegrationType (144-144)
src/webviews/webview-side/integrations/SpannerForm.tsx (1)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/DremioForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/platform/notebooks/deepnote/types.ts (2)
src/platform/notebooks/deepnote/integrationTypes.ts (1)
  • ConfigurableDatabaseIntegrationConfig (139-142)
src/webviews/webview-side/integrations/types.ts (1)
  • ConfigurableDatabaseIntegrationConfig (5-5)
src/webviews/webview-side/integrations/MindsDBForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/notebooks/deepnote/deepnoteNotebookManager.unit.test.ts (1)
src/notebooks/types.ts (1)
  • ProjectIntegration (32-36)
src/webviews/webview-side/integrations/TrinoForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/MaterializeForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/MySQLForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/platform/notebooks/deepnote/integrationStorage.ts (2)
src/platform/notebooks/deepnote/integrationTypes.ts (2)
  • ConfigurableDatabaseIntegrationConfig (139-142)
  • DATAFRAME_SQL_INTEGRATION_ID (5-5)
src/webviews/webview-side/integrations/types.ts (1)
  • ConfigurableDatabaseIntegrationConfig (5-5)
src/notebooks/deepnote/integrations/integrationWebview.ts (2)
src/platform/notebooks/deepnote/integrationTypes.ts (1)
  • ConfigurableDatabaseIntegrationConfig (139-142)
src/webviews/webview-side/integrations/types.ts (1)
  • ConfigurableDatabaseIntegrationConfig (5-5)
src/webviews/webview-side/integrations/MariaDBForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/IntegrationPanel.tsx (2)
src/platform/notebooks/deepnote/integrationTypes.ts (2)
  • ConfigurableDatabaseIntegrationConfig (139-142)
  • ConfigurableDatabaseIntegrationType (144-144)
src/webviews/webview-side/integrations/types.ts (2)
  • ConfigurableDatabaseIntegrationConfig (5-5)
  • ConfigurableDatabaseIntegrationType (3-3)
src/webviews/webview-side/integrations/MongoDBForm.tsx (1)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/notebooks/deepnote/integrations/integrationDetector.ts (2)
src/platform/notebooks/deepnote/integrationTypes.ts (1)
  • ConfigurableDatabaseIntegrationType (144-144)
src/webviews/webview-side/integrations/types.ts (1)
  • ConfigurableDatabaseIntegrationType (3-3)
src/webviews/webview-side/integrations/ConfigurationForm.tsx (1)
src/webviews/webview-side/integrations/types.ts (2)
  • ConfigurableDatabaseIntegrationConfig (5-5)
  • ConfigurableDatabaseIntegrationType (3-3)
src/webviews/webview-side/integrations/DatabricksForm.tsx (1)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
🔇 Additional comments (3)
cspell.json (1)

23-76: Dictionary entries correctly updated for expanded database integrations.

All new terms (alloydb, clickhouse, dremio/Dremio, mindsdb, trino/Trino, venv/Venv) are properly added with consistent alphabetical ordering and appropriate case variants. Changes align with the PR's expanded database integration support.

src/platform/notebooks/deepnote/sqlIntegrationEnvironmentVariablesProvider.ts (2)

14-14: LGTM: Import needed for stronger typing.


91-105: No type incompatibility found.

The array is typed as DatabaseIntegrationConfig, not the restricted ConfigurableDatabaseIntegrationConfig. The 'pandas-dataframe' type is a valid value for DatabaseIntegrationConfig, and integrationStorage.save() explicitly guards against it. No changes needed.

Likely an incorrect or invalid review comment.

@jankuca jankuca force-pushed the jk/all-db-integrations branch from 337565f to 3aca881 Compare November 2, 2025 15:44
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 10

♻️ Duplicate comments (2)
INTEGRATIONS_CREDENTIALS.md (1)

18-18: Verify package version consistency.

A past review flagged version mismatch between this line (v1.1.0) and another reference to v1.1.1. Ensure all package version references are aligned.

src/webviews/webview-side/integrations/MySQLForm.tsx (1)

221-226: Verify CaCertificateFields prop requirements.

Same concern as MindsDBForm: CaCertificateFields receives only partial props. Ensure the component interface makes sslEnabled, caCertificateText, onSslEnabledChange, and onCaCertificateTextChange optional when the corresponding show flags are false.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between cf5262d and 3aca881.

📒 Files selected for processing (20)
  • INTEGRATIONS_CREDENTIALS.md (7 hunks)
  • src/messageTypes.ts (2 hunks)
  • src/notebooks/deepnote/integrations/integrationManager.ts (1 hunks)
  • src/notebooks/deepnote/integrations/integrationWebview.ts (5 hunks)
  • src/platform/common/utils/localize.ts (2 hunks)
  • src/webviews/webview-side/integrations/AlloyDBForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/CaCertificateFields.tsx (1 hunks)
  • src/webviews/webview-side/integrations/ClickHouseForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/DatabricksForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/DremioForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MariaDBForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MaterializeForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MindsDBForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MongoDBForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MySQLForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/PostgresForm.tsx (3 hunks)
  • src/webviews/webview-side/integrations/RedshiftForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/SQLServerForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/SshOptionsFields.tsx (1 hunks)
  • src/webviews/webview-side/integrations/TrinoForm.tsx (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/!(*.node|*.web).ts

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Place shared cross-platform logic in common .ts files (not suffixed with .node or .web)

Files:

  • src/notebooks/deepnote/integrations/integrationManager.ts
  • src/notebooks/deepnote/integrations/integrationWebview.ts
  • src/messageTypes.ts
  • src/platform/common/utils/localize.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.{ts,tsx}: Inject interfaces, not concrete classes
Avoid circular dependencies
Use l10n.t() for user-facing strings
Use typed error classes from src/platform/errors/ when throwing or handling errors
Use the ILogger service instead of console.log
Preserve error details while scrubbing PII in messages and telemetry
Include the Microsoft copyright header in source files
Prefer async/await and handle cancellation with CancellationToken

Files:

  • src/notebooks/deepnote/integrations/integrationManager.ts
  • src/webviews/webview-side/integrations/MariaDBForm.tsx
  • src/webviews/webview-side/integrations/MindsDBForm.tsx
  • src/webviews/webview-side/integrations/TrinoForm.tsx
  • src/webviews/webview-side/integrations/MongoDBForm.tsx
  • src/webviews/webview-side/integrations/DatabricksForm.tsx
  • src/webviews/webview-side/integrations/MySQLForm.tsx
  • src/webviews/webview-side/integrations/ClickHouseForm.tsx
  • src/notebooks/deepnote/integrations/integrationWebview.ts
  • src/webviews/webview-side/integrations/SshOptionsFields.tsx
  • src/webviews/webview-side/integrations/RedshiftForm.tsx
  • src/webviews/webview-side/integrations/DremioForm.tsx
  • src/webviews/webview-side/integrations/AlloyDBForm.tsx
  • src/webviews/webview-side/integrations/PostgresForm.tsx
  • src/webviews/webview-side/integrations/CaCertificateFields.tsx
  • src/webviews/webview-side/integrations/SQLServerForm.tsx
  • src/webviews/webview-side/integrations/MaterializeForm.tsx
  • src/messageTypes.ts
  • src/platform/common/utils/localize.ts
src/platform/**/*.ts

📄 CodeRabbit inference engine (.github/instructions/platform.instructions.md)

src/platform/**/*.ts: Use Inversify decorators for DI: annotate classes with @Injectable() and inject dependencies with @Inject(Token)
Use the centralized logger (import { logger } from '../platform/logging') instead of console.log for application logging

Files:

  • src/platform/common/utils/localize.ts
🧬 Code graph analysis (14)
src/notebooks/deepnote/integrations/integrationManager.ts (2)
src/platform/logging/index.ts (1)
  • logger (35-48)
src/webviews/webview-side/integrations/types.ts (1)
  • IntegrationStatus (7-7)
src/webviews/webview-side/integrations/MariaDBForm.tsx (1)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/MindsDBForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/TrinoForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/MongoDBForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/DatabricksForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/MySQLForm.tsx (1)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/ClickHouseForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/RedshiftForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/DremioForm.tsx (1)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/AlloyDBForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/PostgresForm.tsx (1)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SQLServerForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/MaterializeForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
🔇 Additional comments (12)
src/webviews/webview-side/integrations/SQLServerForm.tsx (1)

223-232: Verify CA certificate field omission.

Other SQL databases (MariaDB, Trino, Materialize, ClickHouse) include CaCertificateFields, but SQL Server form omits it. Confirm this is intentional based on SQL Server's SSL configuration model.

src/platform/common/utils/localize.ts (1)

840-1137: LGTM! Comprehensive localization strings added.

All new integration type labels and form strings follow the established l10n.t() pattern. Consistent naming and well-organized structure across all 15+ integration types.

src/notebooks/deepnote/integrations/integrationWebview.ts (2)

10-14: Type refinement correctly applied.

The shift from DatabaseIntegrationConfig to ConfigurableDatabaseIntegrationConfig is consistent across method signatures and imports.

Also applies to: 415-415, 457-460


133-374: LGTM! Localization strings properly wired to webview.

All new integration type labels and form strings correctly mapped to the LocalizedMessages interface and sent to the webview.

src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)

1-87: LGTM! Clean reusable SSH fields component.

Well-structured with proper conditional rendering, localization, and validation hints. Host and User correctly marked as required.

src/webviews/webview-side/integrations/PostgresForm.tsx (2)

114-182: LGTM! SSH and CA certificate handlers properly implemented.

Handlers correctly update metadata with || undefined pattern to clean up empty strings. Consistent with the rest of the form.


286-306: LGTM! Subcomponents correctly integrated.

SshOptionsFields and CaCertificateFields properly wired with all necessary props and callbacks.

src/webviews/webview-side/integrations/MindsDBForm.tsx (2)

47-53: LGTM! useEffect dependencies correctly fixed.

The effect now properly rebuilds config when existingConfig, integrationId, or defaultName change, addressing the past review comment.


235-240: Review comment references non-existent code.

The MindsDBForm.tsx file is 197 lines and contains no CaCertificateFields component or certificate-related fields. Lines 235–240 do not exist. The actual form only includes basic input fields (name, host, port, database, username, password) with no SSL or certificate configuration.

Likely an incorrect or invalid review comment.

src/webviews/webview-side/integrations/DatabricksForm.tsx (1)

1-246: LGTM! Databricks form correctly implemented.

Follows the established pattern with proper state management, SSH integration, validation, and localization. structuredClone used correctly for deep copying.

src/webviews/webview-side/integrations/MySQLForm.tsx (1)

48-54: LGTM! State management and SSH integration correct.

useEffect properly reacts to all dependencies, and SshOptionsFields is correctly wired.

Also applies to: 210-219

src/webviews/webview-side/integrations/DremioForm.tsx (1)

1-202: LGTM! Dremio form correctly implemented.

Well-structured form following the established pattern. Token field appropriately uses password input type. SSH integration and state management are correct.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
src/webviews/webview-side/integrations/MaterializeForm.tsx (1)

1-1: Microsoft copyright header still missing.

Per coding guidelines, all source files require the Microsoft copyright header. Add it above imports.

As per coding guidelines

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 3aca881 and d754741.

📒 Files selected for processing (3)
  • .github/copilot-instructions.md (0 hunks)
  • src/webviews/webview-side/integrations/MaterializeForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/RedshiftForm.tsx (1 hunks)
💤 Files with no reviewable changes (1)
  • .github/copilot-instructions.md
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.{ts,tsx}: Inject interfaces, not concrete classes
Avoid circular dependencies
Use l10n.t() for user-facing strings
Use typed error classes from src/platform/errors/ when throwing or handling errors
Use the ILogger service instead of console.log
Preserve error details while scrubbing PII in messages and telemetry
Include the Microsoft copyright header in source files
Prefer async/await and handle cancellation with CancellationToken

Files:

  • src/webviews/webview-side/integrations/MaterializeForm.tsx
  • src/webviews/webview-side/integrations/RedshiftForm.tsx
🧬 Code graph analysis (2)
src/webviews/webview-side/integrations/MaterializeForm.tsx (3)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/CaCertificateFields.tsx (1)
  • CaCertificateFields (17-80)
src/webviews/webview-side/integrations/RedshiftForm.tsx (4)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/CaCertificateFields.tsx (1)
  • CaCertificateFields (17-80)
🔇 Additional comments (14)
src/webviews/webview-side/integrations/RedshiftForm.tsx (8)

27-51: LGTM on interface and state initialization.

The interface is well-structured, and the credential preservation via savedCredentials state correctly addresses the previous review feedback.


53-59: LGTM on prop synchronization.

The effect correctly resets state when props change, with proper dependencies.


61-97: LGTM on name and auth method handlers.

The credential preservation logic correctly saves and restores user/password when toggling authentication methods, addressing the previous review feedback.


99-170: LGTM on field change handlers.

All handlers follow consistent patterns, properly guard username/password updates, and use || undefined to clean up empty optional fields.


172-175: LGTM on submit handler.

Standard form submission with proper preventDefault and callback.


177-260: LGTM on form fields.

Proper localization, validation attributes, and field structure for name, auth method, host, port, and database fields.


262-296: LGTM on conditional credential fields.

Proper conditional rendering with semantic HTML and autocomplete attributes.


298-329: LGTM on SSH/SSL fields and form actions.

Child components receive correct props and handlers. The explicit showSslEnabled={true} and showCertificateText={true} props are redundant if those are defaults, but clarity is fine.

src/webviews/webview-side/integrations/MaterializeForm.tsx (6)

1-5: LGTM: Imports are clean.

Standard React, localization, and type imports. SSH/CA certificate components properly imported.


7-13: LGTM: Interface properly typed.

Props use Extract utility type to narrow DatabaseIntegrationConfig. Callbacks clearly defined.


15-34: LGTM: Factory initializes required fields with sensible defaults.

Default port '6875' included (addresses past comment). Optional SSH/SSL fields correctly omitted from initial metadata.


36-57: LGTM: Form state correctly resets on integration/config change.

Effect dependencies include existingConfig, integrationId, and defaultName. structuredClone ensures deep copy. Addresses past concern about stale credentials.


59-157: LGTM: Change handlers follow consistent pattern.

Empty strings and false values converted to undefined to keep metadata minimal. Nested metadata updates properly spread.


159-295: LGTM: Form structure follows React best practices.

All user-facing strings localized. Required fields properly marked and validated. SSH and CA certificate subforms cleanly integrated.

coderabbitai[bot]
coderabbitai bot previously approved these changes Nov 2, 2025
@jankuca
Copy link
Member Author

jankuca commented Nov 2, 2025

I did not manually test all the integrations obviously but I tried to make sure all options are included and since the metadata is being validated against the types from the library, they should be valid. The translation to SQL alchemy config is thoroughly tested in the library and the processing of integration config within the extension has tests from the previous PR.

@jankuca jankuca marked this pull request as ready for review November 2, 2025 16:54
@jankuca jankuca requested a review from a team as a code owner November 2, 2025 16:54
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 15

♻️ Duplicate comments (3)
src/webviews/webview-side/integrations/ClickHouseForm.tsx (1)

1-1: Missing Microsoft copyright header.

Per coding guidelines, all source files require the Microsoft copyright header.

As per coding guidelines

src/webviews/webview-side/integrations/MaterializeForm.tsx (1)

1-1: Microsoft copyright header still missing.

As per coding guidelines

src/webviews/webview-side/integrations/RedshiftForm.tsx (1)

1-1: Add Microsoft copyright header.

All source files must include the Microsoft copyright header per coding guidelines.

As per coding guidelines

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between d754741 and ebf0c26.

📒 Files selected for processing (17)
  • src/webviews/webview-side/integrations/AlloyDBForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/AthenaForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/BigQueryForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/ClickHouseForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/DatabricksForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/DremioForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MariaDBForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MaterializeForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MindsDBForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MongoDBForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/MySQLForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/PostgresForm.tsx (3 hunks)
  • src/webviews/webview-side/integrations/RedshiftForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/SQLServerForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/SnowflakeForm.tsx (7 hunks)
  • src/webviews/webview-side/integrations/SpannerForm.tsx (1 hunks)
  • src/webviews/webview-side/integrations/TrinoForm.tsx (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.{ts,tsx}: Inject interfaces, not concrete classes
Avoid circular dependencies
Use l10n.t() for user-facing strings
Use typed error classes from src/platform/errors/ when throwing or handling errors
Use the ILogger service instead of console.log
Preserve error details while scrubbing PII in messages and telemetry
Include the Microsoft copyright header in source files
Prefer async/await and handle cancellation with CancellationToken

Files:

  • src/webviews/webview-side/integrations/AthenaForm.tsx
  • src/webviews/webview-side/integrations/TrinoForm.tsx
  • src/webviews/webview-side/integrations/MongoDBForm.tsx
  • src/webviews/webview-side/integrations/SnowflakeForm.tsx
  • src/webviews/webview-side/integrations/ClickHouseForm.tsx
  • src/webviews/webview-side/integrations/DremioForm.tsx
  • src/webviews/webview-side/integrations/MySQLForm.tsx
  • src/webviews/webview-side/integrations/SpannerForm.tsx
  • src/webviews/webview-side/integrations/MariaDBForm.tsx
  • src/webviews/webview-side/integrations/PostgresForm.tsx
  • src/webviews/webview-side/integrations/SQLServerForm.tsx
  • src/webviews/webview-side/integrations/RedshiftForm.tsx
  • src/webviews/webview-side/integrations/MaterializeForm.tsx
  • src/webviews/webview-side/integrations/MindsDBForm.tsx
  • src/webviews/webview-side/integrations/AlloyDBForm.tsx
  • src/webviews/webview-side/integrations/DatabricksForm.tsx
  • src/webviews/webview-side/integrations/BigQueryForm.tsx
🧬 Code graph analysis (16)
src/webviews/webview-side/integrations/AthenaForm.tsx (1)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/TrinoForm.tsx (3)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/CaCertificateFields.tsx (1)
  • CaCertificateFields (17-80)
src/webviews/webview-side/integrations/MongoDBForm.tsx (4)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/CaCertificateFields.tsx (1)
  • CaCertificateFields (17-80)
src/webviews/webview-side/integrations/SnowflakeForm.tsx (2)
src/platform/notebooks/deepnote/integrationTypes.ts (2)
  • SnowflakeAuthMethod (86-86)
  • SnowflakeAuthMethods (87-87)
src/platform/notebooks/deepnote/snowflakeAuthConstants.ts (2)
  • SnowflakeAuthMethod (13-13)
  • SnowflakeAuthMethods (4-11)
src/webviews/webview-side/integrations/ClickHouseForm.tsx (3)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/CaCertificateFields.tsx (1)
  • CaCertificateFields (17-80)
src/webviews/webview-side/integrations/DremioForm.tsx (2)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/MySQLForm.tsx (3)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/CaCertificateFields.tsx (1)
  • CaCertificateFields (17-80)
src/webviews/webview-side/integrations/SpannerForm.tsx (2)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/MariaDBForm.tsx (3)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/CaCertificateFields.tsx (1)
  • CaCertificateFields (17-80)
src/webviews/webview-side/integrations/PostgresForm.tsx (2)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/CaCertificateFields.tsx (1)
  • CaCertificateFields (17-80)
src/webviews/webview-side/integrations/SQLServerForm.tsx (3)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/RedshiftForm.tsx (3)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/CaCertificateFields.tsx (1)
  • CaCertificateFields (17-80)
src/webviews/webview-side/integrations/MaterializeForm.tsx (3)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/CaCertificateFields.tsx (1)
  • CaCertificateFields (17-80)
src/webviews/webview-side/integrations/MindsDBForm.tsx (4)
src/platform/common/utils/localize.ts (1)
  • unnamedIntegration (833-833)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/CaCertificateFields.tsx (1)
  • CaCertificateFields (17-80)
src/webviews/webview-side/integrations/AlloyDBForm.tsx (3)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
src/webviews/webview-side/integrations/CaCertificateFields.tsx (1)
  • CaCertificateFields (17-80)
src/webviews/webview-side/integrations/DatabricksForm.tsx (2)
src/webviews/webview-side/react-common/locReactSide.ts (1)
  • getLocString (11-17)
src/webviews/webview-side/integrations/SshOptionsFields.tsx (1)
  • SshOptionsFields (15-87)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Build & Test
🔇 Additional comments (24)
src/webviews/webview-side/integrations/SnowflakeForm.tsx (1)

79-231: LGTM—consistent value extraction pattern.

Extracting e.target.value into local variables before use standardizes the form handlers. The cast to SnowflakeAuthMethod (line 100) is safe given the controlled select options, and value || undefined correctly handles optional fields.

src/webviews/webview-side/integrations/BigQueryForm.tsx (1)

59-65: Consistent event handling pattern.

Extracting the value to a local variable aligns with handleCredentialsChange (line 86) and is a React best practice.

src/webviews/webview-side/integrations/DremioForm.tsx (1)

33-207: Implementation looks solid.

Form logic, state management, and SSH integration are correct. Token field properly uses password type, and required fields are validated.

src/webviews/webview-side/integrations/AthenaForm.tsx (4)

5-23: LGTM.

Type narrowing and default initialization are sound.


46-52: Verify form reset behavior on prop changes.

useEffect resets all pending edits when any dependency changes. Confirm this is intentional if props can update during editing.


84-191: LGTM.

Form structure and submission flow are correct. Sensitive field uses type="password" and autoComplete="off" appropriately.


1-3: Remove the localization verification request—it's incorrect.

getLocString() is the documented pattern for webview-side React code, not a mistake. The locReactSide module exists specifically because webview code cannot use l10n.t() (which reads from disk). All integration forms in this folder consistently use getLocString(), confirming this is the intended approach.

The copyright header issue remains valid—add it for consistency with guidelines, though it's currently missing across all integration forms in this folder.

Likely an incorrect or invalid review comment.

src/webviews/webview-side/integrations/ClickHouseForm.tsx (9)

1-6: LGTM—Imports are clean.


7-13: LGTM—Interface properly typed.

Good use of Extract utility type for type narrowing.


15-31: LGTM—Helper creates correct empty config.

Properly initializes required fields and uses localization.


33-46: LGTM—Initialization handles both new and edit cases.

structuredClone ensures proper deep copy.


48-54: LGTM—Effect properly resets form when switching integrations.

Dependency array correctly includes existingConfig, integrationId, and defaultName.


56-59: LGTM—Submit handler follows standard pattern.


61-104: LGTM—Field handlers follow consistent pattern.

Proper state spreading and optional field handling with || undefined.


106-153: LGTM—SSH/SSL handlers properly manage optional fields.


155-272: LGTM—Form properly wired with localization and validation.

Required fields marked, subcomponents integrated correctly.

src/webviews/webview-side/integrations/MaterializeForm.tsx (3)

7-34: LGTM: Interface and config initialization are well-structured.

The Extract type usage ensures type safety, and the default port is now included in metadata (addressing prior feedback).


43-57: LGTM: State management correctly handles integration switching.

The effect now properly depends on all relevant props, preventing stale credentials when switching integrations.


166-303: LGTM: Form structure follows best practices.

Proper localization, HTML5 validation, appropriate autocomplete attributes, and consistent use of shared components for SSH/SSL fields.

src/webviews/webview-side/integrations/SQLServerForm.tsx (3)

49-55: Proper state synchronization.

The effect correctly handles both existingConfig presence and absence, uses structuredClone to prevent mutations, and includes all relevant dependencies.


107-133: Verify || undefined coercion behavior.

The pattern enabled || undefined converts false to undefined (line 110), removing the field from metadata entirely. Similarly, empty strings become undefined (lines 117, 124, 131). Confirm this is the intended serialization behavior rather than explicitly storing false or empty strings.


135-249: Well-structured form.

Proper localization, required-field marking, appropriate autoComplete attributes, and clean integration of SshOptionsFields. The implementation follows established patterns.

src/webviews/webview-side/integrations/PostgresForm.tsx (2)

23-23: Verify sslEnabled: false initialization.

Handler at line 165 converts false to undefined via enabled || undefined. Initial config should match this pattern for consistency—consider removing sslEnabled from the initial metadata or confirming the difference is intentional.


292-312: LGTM: Component wiring correct.

Both SshOptionsFields and CaCertificateFields are properly wired with all required props and handlers.

@dinohamzic dinohamzic self-requested a review November 3, 2025 09:05
@dinohamzic
Copy link
Member

I tested a couple of different postgres integrations and both are timing out with this error (they work directly on Deepnote):

Screenshot 2025-11-03 at 10 45 54

@jankuca
Copy link
Member Author

jankuca commented Nov 3, 2025

This works when I try it from the office; at my home, it also did not work. IP white listing happening likely.

@jankuca jankuca enabled auto-merge (squash) November 3, 2025 10:13
Copy link
Member

@dinohamzic dinohamzic left a comment

Choose a reason for hiding this comment

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

Tested multiple integrations, all connected nicely, nice job.

I was not able to get the "Manage Integrations" page to apply styling though. 👀

@saltenasl saltenasl disabled auto-merge November 3, 2025 10:46
@saltenasl saltenasl merged commit ed2600a into main Nov 3, 2025
13 checks passed
@saltenasl saltenasl deleted the jk/all-db-integrations branch November 3, 2025 10:47
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.

4 participants