Skip to content

Conversation

techouse
Copy link
Owner

@techouse techouse commented Sep 22, 2025

This pull request adds support for excluding specific tables from being transferred during a SQLite-to-MySQL migration, in addition to the existing option to include only specific tables. It also ensures that the include and exclude options are mutually exclusive, updates internal logic to support the new feature, and expands test coverage for these scenarios.

New CLI Feature: Table Exclusion

  • Added a new CLI option -e/--exclude-sqlite-tables to transfer all tables except the specified ones. This option cannot be used together with -t/--sqlite-tables, and both options now imply --without-foreign-keys. [1] [2] [3]

Core Logic Updates

  • Updated the SQLite3toMySQL class and related types to handle the new exclude_sqlite_tables parameter, ensuring only one of sqlite_tables or exclude_sqlite_tables can be set and adjusting foreign key transfer logic accordingly. [1] [2] [3]
  • Modified the transfer logic to support both inclusion and exclusion of tables by dynamically building the SQL query based on the chosen option.

Testing Enhancements

  • Expanded parameterized test cases to cover combinations with the new exclusion option, and updated assertions to verify the correct tables are transferred depending on the option used. [1] [2] [3] [4] [5] [6] [7]
  • Added a new CLI test to ensure that specifying both include and exclude options results in an error, maintaining mutual exclusivity.

@techouse techouse self-assigned this Sep 22, 2025
@techouse techouse added the enhancement New feature or request label Sep 22, 2025
Copy link

coderabbitai bot commented Sep 22, 2025

Walkthrough

Adds an exclude-list option for SQLite tables across CLI, transporter, and types; enforces mutual exclusivity with the existing include list; updates sqlite_master selection to use IN or NOT IN; and extends functional and CLI tests to cover include vs exclude behaviour and the exclusivity check.

Changes

Cohort / File(s) Summary
CLI option and wiring
src/sqlite3_to_mysql/cli.py
Adds -e/--exclude-sqlite-tables (tuple via OptionEatAll); extends cli() signature with exclude_sqlite_tables; validates mutual exclusivity with --sqlite-tables; forwards exclude_sqlite_tables to SQLite3toMySQL (defaults to empty tuple).
Transporter selection logic
src/sqlite3_to_mysql/transporter.py
Adds _exclude_sqlite_tables attribute and constructor validation to forbid providing both sqlite_tables and exclude_sqlite_tables; sets _without_foreign_keys when either list is present; builds sqlite_master query using IN for whitelist or NOT IN for blacklist with placeholders and an exclude flag; selects tables accordingly.
Types and attributes
src/sqlite3_to_mysql/types.py
Adds optional exclude_sqlite_tables to SQLite3toMySQLParams and _exclude_sqlite_tables to SQLite3toMySQLAttributes.
Functional tests (transfers)
tests/func/sqlite3_to_mysql_test.py
Parametrises a transfer test with exclude_tables: bool to exercise include vs exclude modes; computes remaining_tables for exclude mode; passes exclude_sqlite_tables or sqlite_tables accordingly; updates assertions, column/index checks and logging expectations to target the expected table set.
CLI tests (exclusivity)
tests/func/test_cli.py
Adds tests asserting mutual exclusivity when both -t/--sqlite-tables and -e/--exclude-sqlite-tables are supplied; expects non-zero exit and specific error message. (Duplicate test method appears in file.)

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant CLI as CLI (sqlite3mysql)
  participant Transporter as SQLite3toMySQL
  participant SQLite as SQLite DB
  participant MySQL as MySQL DB

  User->>CLI: Run with args (-t include | -e exclude)
  CLI->>CLI: Validate mutual exclusivity
  alt Both provided
    CLI-->>User: Error (ClickException)
  else One provided
    CLI->>Transporter: Instantiate (sqlite_tables or exclude_sqlite_tables)
    Transporter->>Transporter: Validate exclusivity & set without_foreign_keys
    Transporter->>SQLite: Query sqlite_master with IN / NOT IN (based on mode)
    SQLite-->>Transporter: Table list
    loop For each selected table
      Transporter->>MySQL: Create schema/table/index
      Transporter->>SQLite: Read rows
      Transporter->>MySQL: Insert rows
    end
    Transporter-->>CLI: Completion
    CLI-->>User: "Done!"
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

I hop through schemas, light and quick,
Gnawing rows, I choose or skip—then pick.
Include or exclude, I mind the rule;
IN or NOT IN, I use the tool.
One path at once—no duplicate fuss;
I thump with joy: migrate with us! 🐇

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Description Check ⚠️ Warning The PR description clearly explains the feature, implementation details and added tests, but it does not follow the repository's required PR template: the "Type of change" section (checkboxes), the explicit "How Has This Been Tested?" checklist entries and the overall Checklist items are missing or not filled, and there is no explicit "Fixes #" reference if applicable. Because the repository template is specified as required, the absence of these sections means the description does not fully meet the repository's expectations. For that reason this check fails until the template is followed. Update the PR body to follow the repository template by adding the "Type of change" section with the appropriate checkbox selection (e.g. "New feature"), a detailed "How Has This Been Tested?" section listing the exact tests/commands and their outcomes and ticking the related test boxes, complete the Checklist items, and include a "Fixes #" reference if there is a related issue so automation and reviewers can verify coverage. Ensure the template headings and checkboxes remain in the PR body so CI and reviewers can validate the submission, then re-run CI or note local test results in the description.
✅ Passed checks (2 passed)
Check name Status Explanation
Title Check ✅ Passed The title succinctly describes the primary change — adding an exclude option (-e/--exclude-sqlite-tables) to skip transferring specified SQLite tables — and matches the code and tests in the PR; it is specific and directly related to the main change. The emoji and inline code formatting are cosmetic but do not make the title misleading or unclear. Overall the title communicates the main intent in a single concise sentence.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/exclude-tables

Tip

👮 Agentic pre-merge checks are now available in preview!

Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.

  • Built-in checks – Quickly apply ready-made checks to enforce title conventions, require pull request descriptions that follow templates, validate linked issues for compliance, and more.
  • Custom agentic checks – Define your own rules using CodeRabbit’s advanced agentic capabilities to enforce organization-specific policies and workflows. For example, you can instruct CodeRabbit’s agent to verify that API documentation is updated whenever API schema files are modified in a PR. Note: Upto 5 custom checks are currently allowed during the preview period. Pricing for this feature will be announced in a few weeks.

Please see the documentation for more information.

Example:

reviews:
  pre_merge_checks:
    custom_checks:
      - name: "Undocumented Breaking Changes"
        mode: "warning"
        instructions: |
          Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).

Please share your feedback with us on this Discord post.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@techouse techouse linked an issue Sep 22, 2025 that may be closed by this pull request
@techouse techouse changed the title ✨ exclude tables via -e/--exclude-sqlite-tables ✨ exclude SQLite tables via -e/--exclude-sqlite-tables Sep 22, 2025
@techouse techouse changed the title ✨ exclude SQLite tables via -e/--exclude-sqlite-tables ✨ exclude transferring SQLite tables via -e/--exclude-sqlite-tables Sep 22, 2025
Copy link

@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: 0

🧹 Nitpick comments (2)
src/sqlite3_to_mysql/transporter.py (1)

868-885: Consider parameterised query safety patterns.

Whilst the current implementation uses parameterised queries correctly with placeholders and bound parameters, the string formatting for the NOT/IN clause construction could be made more explicit about its safety. Consider adding a comment to clarify that exclude and placeholders are safely constructed and not user-controlled.

             self._sqlite_cur.execute(
                 """
                 SELECT name FROM sqlite_master
                 WHERE type='table'
                 AND name NOT LIKE 'sqlite_%'
+                -- Safe: 'exclude' is either "NOT" or "", placeholders are '?' repeated
                 AND name {exclude} IN ({placeholders})
                 """.format(
                     exclude="NOT" if len(self._exclude_sqlite_tables) > 0 else "",
                     placeholders=", ".join("?" * len(specific_tables)),
                 ),
                 specific_tables,
             )
src/sqlite3_to_mysql/cli.py (1)

204-205: Consider updating the foreign keys logic.

The without_foreign_keys parameter calculation on line 205 only checks sqlite_tables but doesn't account for exclude_sqlite_tables. However, this appears to be handled correctly in the transporter's __init__ method. Consider simplifying this line for clarity:

             sqlite_tables=sqlite_tables or tuple(),
             exclude_sqlite_tables=exclude_sqlite_tables or tuple(),
-            without_foreign_keys=without_foreign_keys or (sqlite_tables is not None and len(sqlite_tables) > 0),
+            without_foreign_keys=without_foreign_keys,

The transporter already handles this logic internally, so passing the raw value would be cleaner and avoid duplication.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between bb5aba8 and f27a853.

📒 Files selected for processing (5)
  • src/sqlite3_to_mysql/cli.py (3 hunks)
  • src/sqlite3_to_mysql/transporter.py (2 hunks)
  • src/sqlite3_to_mysql/types.py (2 hunks)
  • tests/func/sqlite3_to_mysql_test.py (7 hunks)
  • tests/func/test_cli.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (4)
src/sqlite3_to_mysql/cli.py (1)
src/sqlite3_to_mysql/click_utils.py (1)
  • OptionEatAll (8-54)
tests/func/sqlite3_to_mysql_test.py (1)
tests/conftest.py (1)
  • sqlite_database (150-187)
tests/func/test_cli.py (1)
tests/conftest.py (4)
  • cli_runner (333-334)
  • sqlite_database (150-187)
  • mysql_credentials (206-232)
  • MySQLCredentials (195-202)
src/sqlite3_to_mysql/transporter.py (1)
tests/unit/sqlite3_to_mysql_test.py (8)
  • execute (248-249)
  • execute (281-282)
  • execute (364-365)
  • execute (418-419)
  • execute (460-465)
  • execute (519-520)
  • execute (565-566)
  • execute (615-621)
🪛 Ruff (0.13.1)
src/sqlite3_to_mysql/cli.py

196-199: Abstract raise to an inner function

(TRY301)


196-199: Avoid specifying long messages outside the exception class

(TRY003)

src/sqlite3_to_mysql/transporter.py

115-115: Avoid specifying long messages outside the exception class

(TRY003)


875-883: Possible SQL injection vector through string-based query construction

(S608)

⏰ 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). (9)
  • GitHub Check: Test (python3.10, mariadb:10.0, 1, true, 3.10)
  • GitHub Check: Test (python3.9, mariadb:10.0, 1, true, 3.9)
  • GitHub Check: Test (python3.11, mariadb:10.0, 1, true, 3.11)
  • GitHub Check: Test (python3.10, mariadb:5.5, 1, true, 3.10)
  • GitHub Check: Test (python3.13, mariadb:5.5, 1, true, 3.13)
  • GitHub Check: Test (python3.9, mariadb:5.5, 1, true, 3.9)
  • GitHub Check: Test (python3.12, mariadb:5.5, 1, true, 3.12)
  • GitHub Check: Test (python3.11, mariadb:5.5, 1, true, 3.11)
  • GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (9)
src/sqlite3_to_mysql/types.py (2)

25-25: LGTM! Clean addition of the exclusion parameter.

The new exclude_sqlite_tables parameter is properly typed as Optional[Sequence[str]], maintaining consistency with the existing sqlite_tables parameter.


56-56: LGTM! Internal attribute properly aligned.

The _exclude_sqlite_tables attribute correctly mirrors the public parameter type as Sequence[str], consistent with _sqlite_tables.

src/sqlite3_to_mysql/transporter.py (1)

112-121: LGTM! Robust mutual exclusivity validation.

The implementation correctly:

  1. Initialises _exclude_sqlite_tables with a default empty tuple
  2. Validates mutual exclusivity between include and exclude options
  3. Appropriately sets _without_foreign_keys when either option is provided
src/sqlite3_to_mysql/cli.py (2)

44-52: LGTM! Well-documented CLI option.

The new --exclude-sqlite-tables option is properly implemented with:

  • Clear help text explaining the mutual exclusivity with --sqlite-tables
  • Appropriate use of OptionEatAll for space-separated table names
  • Consistent parameter structure with the existing include option

195-199: LGTM! Clear error message for mutual exclusivity.

The validation correctly enforces that users cannot specify both include and exclude options simultaneously, with a helpful error message.

tests/func/sqlite3_to_mysql_test.py (3)

461-525: LGTM! Comprehensive test coverage for exclusion feature.

The parameterised test thoroughly covers all combinations of:

  • Chunk/no chunk
  • With/without rowid
  • All insert methods (IGNORE, UPDATE, DEFAULT)
  • Duplicate key handling
  • Both include and exclude modes

541-543: LGTM! Clean calculation of remaining tables.

The logic correctly computes the set difference to determine which tables should be transferred when using exclusion mode.


560-569: LGTM! Proper assertion of log messages.

The test correctly verifies that:

  • The appropriate tables are logged as being transferred (remaining when excluding, random when including)
  • The "Done!" message is logged upon completion
tests/func/test_cli.py (1)

632-665: Incorrect — duplicate not found

Repository search shows a single occurrence at tests/func/test_cli.py:632; no duplicate exists and the test should not be removed.

Likely an incorrect or invalid review comment.

Copy link

@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: 0

🧹 Nitpick comments (3)
src/sqlite3_to_mysql/cli.py (3)

44-52: Fix help-string grammar; mirror exclusivity on -t option

Change “Can not” → “Cannot”. Also consider adding the same exclusivity note to the -t/--sqlite-tables help for symmetry.

-    "Can not be used together with --sqlite-tables.",
+    "Cannot be used together with --sqlite-tables.",

Additionally (outside this hunk), consider updating the -t/--sqlite-tables help to also state:
"""
Cannot be used together with --exclude-sqlite-tables.
"""


195-200: Tighten mutual‑exclusion check to detect “provided” vs “populated”

Prefer explicit None checks to make intent clear and robust even if an empty tuple is ever passed.

-        if exclude_sqlite_tables and sqlite_tables:
+        if exclude_sqlite_tables is not None and sqlite_tables is not None:

204-209: Simplify without_foreign_keys calculation

Same behaviour, clearer intent.

-            without_foreign_keys=without_foreign_keys
-            or (
-                (sqlite_tables is not None and len(sqlite_tables) > 0)
-                or (exclude_sqlite_tables is not None and len(exclude_sqlite_tables) > 0)
-            ),
+            without_foreign_keys=without_foreign_keys
+            or bool(sqlite_tables)
+            or bool(exclude_sqlite_tables),
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f27a853 and 46c8864.

📒 Files selected for processing (1)
  • src/sqlite3_to_mysql/cli.py (3 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
src/sqlite3_to_mysql/cli.py (2)
src/sqlite3_to_mysql/click_utils.py (1)
  • OptionEatAll (8-54)
src/sqlite3_to_mysql/transporter.py (1)
  • SQLite3toMySQL (58-985)
🪛 Ruff (0.13.1)
src/sqlite3_to_mysql/cli.py

196-199: Abstract raise to an inner function

(TRY301)


196-199: Avoid specifying long messages outside the exception class

(TRY003)

⏰ 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). (9)
  • GitHub Check: Test (python3.11, mariadb:10.0, 1, true, 3.11)
  • GitHub Check: Test (python3.10, mariadb:10.0, 1, true, 3.10)
  • GitHub Check: Test (python3.13, mariadb:5.5, 1, true, 3.13)
  • GitHub Check: Test (python3.9, mariadb:10.0, 1, true, 3.9)
  • GitHub Check: Test (python3.12, mariadb:5.5, 1, true, 3.12)
  • GitHub Check: Test (python3.11, mariadb:5.5, 1, true, 3.11)
  • GitHub Check: Test (python3.10, mariadb:5.5, 1, true, 3.10)
  • GitHub Check: Test (python3.9, mariadb:5.5, 1, true, 3.9)
  • GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (1)
src/sqlite3_to_mysql/cli.py (1)

148-148: Signature update LGTM

Parameter name aligns with the option and downstream usage.

Copy link

codecov bot commented Sep 23, 2025

Codecov Report

❌ Patch coverage is 92.30769% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 93.81%. Comparing base (bb5aba8) to head (8495b7b).
⚠️ Report is 1 commits behind head on master.

Files with missing lines Patch % Lines
src/sqlite3_to_mysql/transporter.py 87.50% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #146      +/-   ##
==========================================
- Coverage   93.85%   93.81%   -0.05%     
==========================================
  Files           8        8              
  Lines         797      808      +11     
==========================================
+ Hits          748      758      +10     
- Misses         49       50       +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.

Copy link

@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: 0

🧹 Nitpick comments (3)
src/sqlite3_to_mysql/cli.py (3)

44-52: Polish help text and UX for the new option (metavar + wording).

  • Add a metavar to show multi‑value usage clearly.
  • Prefer “Cannot” in the help string.

Apply this diff:

 @click.option(
     "-e",
     "--exclude-sqlite-tables",
     type=tuple,
     cls=OptionEatAll,
+    metavar="TABLE [TABLE ...]",
     help="Transfer all tables except these specific tables (space separated table names). "
     "Implies --without-foreign-keys which inhibits the transfer of foreign keys. "
-    "Can not be used together with --sqlite-tables.",
+    "Cannot be used together with --sqlite-tables.",
 )

195-200: Prefer a truthiness check and raise UsageError (addresses Ruff TRY003/TRY301).

  • Use if sqlite_tables and exclude_sqlite_tables: to cover empty tuples.
  • Raise click.UsageError for CLI misuse.
  • Optionally, consider moving this (and other pre-run validations) outside the big try block later to narrow exception scope.

Apply this diff:

-        if exclude_sqlite_tables is not None and sqlite_tables is not None:
-            raise click.ClickException(
-                "Error: Both -t/--sqlite-tables and -e/--exclude-sqlite-tables options are set. "
-                "Please use only one of them."
-            )
+        if sqlite_tables and exclude_sqlite_tables:
+            raise click.UsageError(
+                "Both -t/--sqlite-tables and -e/--exclude-sqlite-tables are set. Please use only one."
+            )

204-206: Avoid duplicating implied foreign-keys logic; let the transporter enforce it.

transporter.SQLite3toMySQL already forces without_foreign_keys=True when include/exclude lists are set. Passing the derived value here duplicates policy and risks drift.

Apply this diff:

             sqlite_tables=sqlite_tables or tuple(),
             exclude_sqlite_tables=exclude_sqlite_tables or tuple(),
-            without_foreign_keys=without_foreign_keys or bool(sqlite_tables) or bool(exclude_sqlite_tables),
+            without_foreign_keys=without_foreign_keys,
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 46c8864 and c80fd26.

📒 Files selected for processing (1)
  • src/sqlite3_to_mysql/cli.py (3 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
src/sqlite3_to_mysql/cli.py (1)
src/sqlite3_to_mysql/click_utils.py (1)
  • OptionEatAll (8-54)
🪛 Ruff (0.13.1)
src/sqlite3_to_mysql/cli.py

196-199: Abstract raise to an inner function

(TRY301)


196-199: Avoid specifying long messages outside the exception class

(TRY003)

⏰ 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). (9)
  • GitHub Check: Test (python3.11, mariadb:10.0, 1, true, 3.11)
  • GitHub Check: Test (python3.9, mariadb:10.0, 1, true, 3.9)
  • GitHub Check: Test (python3.10, mariadb:10.0, 1, true, 3.10)
  • GitHub Check: Test (python3.13, mariadb:5.5, 1, true, 3.13)
  • GitHub Check: Test (python3.12, mariadb:5.5, 1, true, 3.12)
  • GitHub Check: Test (python3.11, mariadb:5.5, 1, true, 3.11)
  • GitHub Check: Test (python3.10, mariadb:5.5, 1, true, 3.10)
  • GitHub Check: Test (python3.9, mariadb:5.5, 1, true, 3.9)
  • GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (1)
src/sqlite3_to_mysql/cli.py (1)

148-148: Signature update LGTM.

Adding exclude_sqlite_tables: Optional[Sequence[str]] aligns with the new CLI option and downstream usage.

Copy link

@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

🧹 Nitpick comments (1)
src/sqlite3_to_mysql/cli.py (1)

195-200: Mutual‑exclusivity guard is correct; consider click.BadOptionUsage for UX.

Current behaviour is fine. Optionally use click.BadOptionUsage to point users at the offending option and align with Click idioms (also satisfies Ruff TRY003/TRY301 hints).

Apply this diff:

-            raise click.ClickException(
-                "Error: Both -t/--sqlite-tables and -e/--exclude-sqlite-tables options are set. "
-                "Please use only one of them."
-            )
+            raise click.BadOptionUsage(
+                option_name="-t/--sqlite-tables",
+                message="Options -t/--sqlite-tables and -e/--exclude-sqlite-tables are mutually exclusive. Use only one.",
+            )
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c80fd26 and 8495b7b.

📒 Files selected for processing (1)
  • src/sqlite3_to_mysql/cli.py (3 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
src/sqlite3_to_mysql/cli.py (2)
src/sqlite3_to_mysql/click_utils.py (1)
  • OptionEatAll (8-54)
src/sqlite3_to_mysql/transporter.py (1)
  • SQLite3toMySQL (58-985)
🪛 Ruff (0.13.1)
src/sqlite3_to_mysql/cli.py

196-199: Abstract raise to an inner function

(TRY301)


196-199: Avoid specifying long messages outside the exception class

(TRY003)

⏰ 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). (9)
  • GitHub Check: Test (python3.13, mariadb:5.5, 1, true, 3.13)
  • GitHub Check: Test (python3.10, mariadb:10.0, 1, true, 3.10)
  • GitHub Check: Test (python3.11, mariadb:10.0, 1, true, 3.11)
  • GitHub Check: Test (python3.11, mariadb:5.5, 1, true, 3.11)
  • GitHub Check: Test (python3.9, mariadb:10.0, 1, true, 3.9)
  • GitHub Check: Test (python3.12, mariadb:5.5, 1, true, 3.12)
  • GitHub Check: Test (python3.9, mariadb:5.5, 1, true, 3.9)
  • GitHub Check: Test (python3.10, mariadb:5.5, 1, true, 3.10)
  • GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (2)
src/sqlite3_to_mysql/cli.py (2)

148-148: Signature update wired through — LGTM.

The new exclude_sqlite_tables parameter is correctly added and typed.


204-206: Approve — implied --without-foreign-keys with include/exclude is covered.

transporter sets _without_foreign_keys when sqlite_tables or exclude_sqlite_tables are provided (src/sqlite3_to_mysql/transporter.py:112–120); CLI enforces mutual exclusivity (src/sqlite3_to_mysql/cli.py:195–199); functional and CLI tests cover include/exclude and the exclusivity error (tests/func/sqlite3_to_mysql_test.py:545–548; tests/func/test_cli.py:660–664).

@techouse techouse merged commit 2381b25 into master Sep 23, 2025
61 of 63 checks passed
@techouse techouse deleted the feat/exclude-tables branch September 23, 2025 18:46
@avibrazil
Copy link

Thanks, works perfectly !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add option to exclude or include objects
2 participants