Files
relspecgo/tests/_plans/pgsql.md
T

2.7 KiB

Plan: PostgreSQL

Tooling

  • Live tests: tests/dbtest/dbtest.sh test postgres (defaults to readers/pgsql, writers/pgsql, writers/sqlexec) or up postgres + eval "$(tests/dbtest/dbtest.sh env postgres)".
  • Isolation: each live test creates and drops its own schema; shared fixture DB comes from init.sql.

Existing

  • Reader tests: pkg/readers/pgsql/reader_test.go (live tests skipped without RELSPEC_TEST_PG_CONN; pure tests: MapDataType, ParseIndexDefinition, DeriveRelationship, composite FK)
  • Writer tests: diff_statements, directives, extensions, generated_column, migration_writer, serial_sequence
  • Data: tests/postgres/init.sql, tests/postgres/issue21, tests/assets/dbml/*, examples/test_schema*.dbml

readers/pgsql (16.0%)

Item Gap Approach
normalizePostgresDefault (queries.go) 0% Pure; table-driven: casts, nextval, functions, quoted literals, NULL
countColumns/Constraints/Indexes 0% Pure; build Database fixtures
ReadDatabase/ReadSchema/ReadTable ~0% Live; run against init.sql DB; assert counts, PK/FK/unique/check/index, views, sequences, extensions
query* (11 funcs) 0% Covered via live ReadDatabase; add one live case per object type
close 0% Live; connection released after read and on error

Data needed: extend tests/postgres/init.sql (loaded by dbtest on up; apply changes with dbtest.sh restart postgres) with a view, sequence, check constraint, partial index, extension, composite FK (verify what already exists first).

writers/pgsql (74.0%)

Item Gap Approach
extractTableNameFromCreate, extractStatementContext, extractSQLStringValue, parseQualifiedIdent, firstBareIdent, firstIdentAfterKeyword, stripQuotes, buildStmtContext, detectStatementType, truncateStatement 0% Pure; table-driven; quoted/qualified/unquoted idents, each statement type, long statements
getCurrentTimestamp, finishReport, writeReport 0% Report written to temp file; JSON shape, counts, failed statements
executeStatements, executeDatabaseSQL 0% Live; success, failure with continue-on-error, failure stop, report output
generateLiveDiffStatements 28.6% Live; empty DB, drifted DB, identical DB
currentColumnHasDescription, ExecuteCommentColumn 0% Migration writer fixtures with comments added/removed/changed
template_functions.go filter, mapFunc 0% Pure

Reuse tests/integration/failed_statements_example.txt for failed-statement report cases. Ad-hoc SQL setup: dbtest.sh exec postgres <file>.

pkg/pgsql (87.8%)

  • Spot-check uncovered funcs after the above; add keyword/datatype edge cases only.