mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-30 07:08:24 +00:00
ci(postgres): add a static pre-commit check for MySQL-only SQL
The Postgres test job is label-gated, so it does not run on every PR. This adds an always-on pre-commit hook that statically flags the *mechanical* breaks: MySQL-only functions (timestamp(date,time), timediff, str_to_date, date_format/add/sub, group_concat, period_diff, SQL IF()), SHOW INDEX/TABLES/COLUMNS, single-quoted aliases, UPDATE..JOIN, interpolated/f-string SQL carrying MySQL-isms, set_value/db_set(<Check>, bool), and MySQL SHOW INDEX result keys. It deliberately does NOT flag the framework auto-translations (ifnull->coalesce, backtick/locate/REGEXP, .like()->ILIKE) nor the *semantic* divergences (loose GROUP BY, case-sensitive ==/IN, NULL ordering, tiebreakers) — those need the test suite, which remains the backstop. AST + structure-gated regex keep false positives near zero (docstrings and prose skipped); '# pg-ok' exempts intentional MariaDB-only branches. Scoped to erpnext/ excluding patches/. Includes a unit test of the checker.
This commit is contained in:
@@ -66,6 +66,18 @@ repos:
|
||||
- id: ruff-format
|
||||
name: "Run ruff formatter"
|
||||
|
||||
- repo: local
|
||||
hooks:
|
||||
- id: postgres-compat
|
||||
name: "PostgreSQL compatibility (static check)"
|
||||
description: "Flags MySQL-only SQL that breaks on Postgres; the label-gated PG test job is the backstop for semantic divergences."
|
||||
entry: .github/helper/postgres_compat.py
|
||||
language: script
|
||||
files: ^erpnext/.*\.py$
|
||||
# patches/ are historical, version-gated migrations (skipped on fresh Postgres installs);
|
||||
# out of scope for the always-on gate. test_postgres_compat.py holds intentional bad-SQL fixtures.
|
||||
exclude: ^erpnext/patches/|^erpnext/tests/test_postgres_compat\.py$
|
||||
|
||||
ci:
|
||||
autoupdate_schedule: weekly
|
||||
skip: []
|
||||
|
||||
Reference in New Issue
Block a user