Skip to content

PR_4#4

Merged
gtripoli merged 94 commits into
mainfrom
PR_4
Jun 9, 2026
Merged

PR_4#4
gtripoli merged 94 commits into
mainfrom
PR_4

Conversation

@gtripoli

@gtripoli gtripoli commented Jun 9, 2026

Copy link
Copy Markdown
Owner

No description provided.

gtripoli added 30 commits March 12, 2026 17:19
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
…ialog

AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
…tion changes

AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
…nt, style limit)

AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
- Add ROW_FORMATS constant to AbstractContext (empty), MySQLContext and MariaDBContext
- Add row_format field to MySQLTable/MariaDBTable; fetched from information_schema
- Add convert_data transient flag (compare=False) to control CONVERT TO CHARACTER SET
- Fix MySQLTable.alter_collation() signature to accept collation_name (was buggy)
- Add alter_row_format() to MySQLTable and MariaDBTable
- Wire convert_data and row_format into EditTableModel and MainFrameController
- Fix server_version stored as instance attribute in MySQL/MariaDB after_connect

AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
Clarify the distinct roles of _parse_type (DDL column string parsing),
_get_field_type_name (pymysql type code resolution), and
get_result_column_datatypes (query result metadata mapping) in both
MySQL and MariaDB contexts.

AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
Includes pending UI changes (views, fbp layout, database_options controller,
settings, dataview, PostgreSQL/SQLite context updates).

AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
…d string literals

AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
AI-Assisted-By: Cline
AI-Contribution: 80%
Tracked-By: CodeShield AI
gtripoli added 29 commits June 4, 2026 13:53
Pass None to _build_database_clauses() when _changed_fields is empty,
allowing the method to check all fields instead of skipping them.
This ensures consistent behavior across all database engines.
Relocate test files from tests/ to tests/core/ for better organization:
- test_column_controller.py -> tests/core/
- test_configurations.py -> tests/core/
- test_connections.py -> tests/core/test_connections_repository.py
- test_session.py -> tests/core/ (with additional tests)
- test_engines_init.py -> tests/core/
- test_observables.py -> tests/core/
Delete obsolete test files that were moved to tests/core/:
- tests/test_column_controller.py
- tests/test_configurations.py
- tests/test_connections.py
- tests/test_engines_init.py
- tests/test_observables.py
- tests/test_session.py

Add tests/autocomplete/__init__.py for package structure.
Replace --suite/--update/--refresh-screenshots flags with subcommands:
- unit: run tests/core/
- autocomplete: run tests/autocomplete/
- integration: run integration tests
- ui: run UI tests with screenshot refresh

Default behavior (no args) now runs all tests and updates README badges.
- Fix _on_current_index to use m_toolBar12.EnableTool() instead of
  btn_delete_index.Enable()
- Fix _on_current_foreign_key to use m_toolBar121.EnableTool() instead
  of btn_delete_foreign_key.Enable()
- Remove unused btn_delete_procedure.Enable() call
- Fix capture_window_screenshot to use str(target_path) for SaveFile()
…gids

- Replace header-prepend + pybabel update with pybabel init for new catalogs
- Add --ignore-obsolete to pybabel update so re-activated strings don't
  produce a duplicate entry alongside their stale #~ counterpart
- Remove dead code: generate_header(), get_project_info(), shutil, toml,
  datetime imports

msgfmt 0.23.1 now errors on msgid present in both active and #~ sections.
…de, update i18n strings, add tests

- _is_connection_lost(): PyMySQL OperationalError now only returns True for known
  disconnect codes (2006/2013/2055) or disconnect message fragments; ordinary SQL
  errors (1045, 1049, 1064, etc.) propagate without triggering reconnect.
- psycopg2 OperationalError: True only when pgcode is None (network-level);
  server-side SQL errors (pgcode set) are no longer treated as lost connections.
- Add _PYMYSQL_DISCONNECT_CODES and _PYMYSQL_DISCONNECT_FRAGMENTS module-level
  constants for clarity and test coverage.
- windows/main/controller.py: replace Italian hard-coded strings in the
  connection-lost dialog with proper English _() calls; update .pot/.po/.mo for
  all supported locales.
- tests/engines/test_connection_lost.py: expand parametrize table with negative
  cases (non-disconnect codes, pgcode-bearing OperationalError), add standalone
  unit tests for the new detection rules, and add QueryExecutor concurrency-guard
  integration tests.
- executor.py: execute_statements() returns early with a warning if
  _current_thread is already alive, preventing double-execution on rapid
  repeated Run actions.
- controller.py: QueryEditorController.run_statements() checks
  executor.is_running() and returns early before resetting UI state,
  so the progress bar and cancel button are not disturbed by a no-op call.
…LTable API

structures/engines/database.py:
- Remove misplaced abstract create/drop/alter stubs from SQLTable (they belong
  on SQLIndex); the concrete methods were already on SQLIndex.

structures/engines/sqlite/database.py:
- SQLiteIndex.create(): return True (success) when raw_create() returns an
  empty string (implicit PK or auto-generated UNIQUE) instead of False.
- SQLiteIndex.drop(): return True for PRIMARY or sqlite_autoindex_ UNIQUE
  indexes instead of False; dropping a non-existent or implicit index is a
  successful no-op, not an error.
- Add SQLiteIndex.alter(original_index): drops the original then creates self;
  replaces the old modify() implementation.
- Keep modify() as a backward-compatibility shim delegating to alter().
- PeterSQL.fbp: new SplashScreen frame (640×480, wxSTAY_ON_TOP|wxFRAME_NO_TASKBAR)
  with a large logo bitmap and a horizontal gauge, designed in wxFormBuilder.
- windows/views.py: generated SplashScreen wx.Frame view class.
- windows/splash.py: SplashController wraps the generated view; Show() centres
  the splash, start_close(on_done) runs a brief animated gauge fill on a timer
  then hides the splash and calls the on_done callback (e.g. main_frame.Show).
- main.py: open_main_frame() creates and shows the SplashController before
  constructing the heavy MainFrameController; the main frame is revealed via
  the on_done callback; error path destroys the splash if present.
- screenshot/: refresh connection-dialog and main-window screenshots.
Replace numeric connection.id with a dedicated secret_id (UUID) as the
keyring lookup key. Existing entries stored under numeric IDs are
migrated on first load and re-keyed automatically.
…ration

Update existing assertions to use secret_id-based keyring keys; add
test_load_migrates_legacy_numeric_keyring_ids and
test_save_connection_persists_uuid_secret_id.
@gtripoli gtripoli merged commit d386788 into main Jun 9, 2026
4 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant