Skip to content

Add sqlExecute #30

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 18 commits into from
Closed

Conversation

edmundmiller
Copy link
Member

This pull request introduces a new SQL execution function (sqlExecute) to the nf-sqldb plugin, enhances database compatibility by gracefully handling unsupported operations, and provides an example script to demonstrate the new functionality.

New SQL Execution Functionality:

  • Added the sqlExecute function to execute SQL statements that do not return a result set (e.g., DDL and DML operations). It provides detailed responses, including success status and affected rows for DML statements.
  • Introduced an example script (examples/sql-execution/main.nf) and configuration (examples/sql-execution/nextflow.config) to demonstrate the usage of sqlExecute for creating, updating, deleting, and querying data. [1] [2]

Database Compatibility Enhancements:

  • Updated InsertHandler to handle unsupported operations (e.g., setAutoCommit, setObject, commit, executeBatch) with fallback behavior, improving compatibility with drivers like Databricks. [1] [2] [3] [4] [5]

Build and Installation Updates:

  • Added a version variable in the Makefile to dynamically fetch the plugin version and a new install target for local plugin installation. [1] [2]

Minor Code Enhancements:

  • Updated QueryHandler to normalize SQL statements before execution for consistency.

edmundmiller and others added 16 commits May 27, 2025 09:41
…SQL execution logic

- Removed the executeUpdate parameter from QueryHandler and ChannelSqlExtension.
- Simplified SQL execution by directly executing queries without checking for DDL or UPDATE statements.

Signed-off-by: Edmund Miller <[email protected]>
- Introduced `execute` and `executeUpdate` methods for executing SQL statements without returning a result set.
- Added parameter validation and error handling for database connections.
- Implemented SQL statement normalization to ensure proper execution.

Signed-off-by: Edmund Miller <[email protected]>
- Added tests for DDL and DML operations, including table creation, updates, and deletions.
- Implemented error handling tests for invalid SQL statements and database configurations.
- Ensured proper handling of statement normalization.

Signed-off-by: Edmund Miller <[email protected]>
- Changed `execute` and `executeUpdate` methods from static to instance methods, allowing for better integration with session management.
- Updated test cases to reflect the new method calls and ensure proper session initialization.

Signed-off-by: Edmund Miller <[email protected]>
- Changed the database configuration from in-memory to file-based for persistence.
- Updated SQL statements to use uppercase for table and column names for consistency.
- Enhanced logging to include results of table creation and updates.

Signed-off-by: Edmund Miller <[email protected]>
…ions

- Added try-catch blocks around `setAutoCommit` and `commit` methods to handle exceptions for databases that do not support these operations.
- Improved logging to provide feedback when default behaviors are used due to unsupported operations.

Signed-off-by: Edmund Miller <[email protected]>
- Added a new `.envrc` file to manage environment variables for database connections.

Signed-off-by: Edmund Miller <[email protected]>
- Renamed the `execute` function to `sqlExecute` for clarity and consistency.
- Updated all references in the README, example scripts, and tests to reflect the new function name.
- Enhanced documentation to provide clearer usage examples for SQL execution functions.

Signed-off-by: Edmund Miller <[email protected]>

Co-authored-by: Edmund Miller <[email protected]>
Co-authored-by: Paolo Di Tommaso <[email protected]>
- Enhanced logging in examples to provide feedback on the number of affected rows and results of DDL operations.

Signed-off-by: Edmund Miller <[email protected]>

Co-authored-by: Paolo Di Tommaso <[email protected]>
- Modified the `sqlExecute` method to return a map containing success status, affected rows, and error messages for both DDL and DML operations.
- Updated documentation to reflect the new return structure.
- Adjusted unit tests to validate the new response format and ensure proper handling of success and error cases.

Signed-off-by: Edmund Miller <[email protected]>
Co-authored-by: Paolo Di Tommaso <[email protected]>
Signed-off-by: Edmund Miller <[email protected]>
@edmundmiller edmundmiller requested a review from pditommaso May 27, 2025 15:13
@edmundmiller edmundmiller self-assigned this May 27, 2025
…ations

- Enhanced the InsertHandler to provide fallbacks for unsupported operations like setObject and executeBatch, specifically for drivers such as Databricks.
- Added detailed logging to inform users when operations are skipped or when fallbacks are attempted, improving debuggability.
- Ensured that exceptions are thrown with clear messages when both primary and fallback methods fail, preventing silent failures.

nextflow-io#30 (comment)

Co-authored-by: Paolo Di Tommaso <[email protected]>
Signed-off-by: Edmund Miller <[email protected]>
@edmundmiller
Copy link
Member Author

@edmundmiller edmundmiller requested a review from pditommaso May 27, 2025 16:38
@pditommaso
Copy link
Member

pditommaso commented May 27, 2025

Try this patch.txt

Also make future PR directly into this repo, instead of using your fork .

…Handler

Co-authored-by: Paolo Di Tommaso <[email protected]>
Signed-off-by: Edmund Miller <[email protected]>
@edmundmiller
Copy link
Member Author

Done! Nice work!

@pditommaso
Copy link
Member

It turns out that setObject and executeBatch are supported (worked fine in my tests). I've simplified a bit a merged manually. See 072ae03

@pditommaso pditommaso closed this May 28, 2025
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.

2 participants