Documentation
¶
Overview ¶
Package comparer provides schema comparison and difference detection for MySQL and PostgreSQL databases.
Overview ¶
The comparer package analyzes two DatabaseSchema objects and produces a detailed list of differences, including:
- Added, removed, and modified tables
- Column changes (type, constraints, defaults)
- Index additions, removals, and modifications
- Foreign key constraint changes
- View, function, procedure changes
- Database-specific objects (triggers, events, sequences, etc.)
Usage ¶
Basic comparison:
diffs, err := comparer.CompareSchemas(oldSchema, newSchema, nil)
if err != nil {
return err
}
for _, diff := range diffs {
fmt.Printf("%s: %s\n", diff.Type, diff.Message)
}
Comparison with options:
options := &comparer.CompareOptions{
IgnoreTables: []string{"temp_*", "cache_*"},
CompareData: false,
}
diffs, err := comparer.CompareSchemas(oldSchema, newSchema, options)
Comparison Engines ¶
The package uses database-specific comparison engines (MySQL and PostgreSQL) that understand the nuances of each database system. These engines handle:
- Type compatibility (e.g., VARCHAR vs TEXT)
- Default value formatting
- Expression normalization
- Database-specific features
Integration Tests ¶
The package includes comprehensive integration tests that verify comparison accuracy against real MySQL and PostgreSQL databases using testcontainers.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CompareSchemasDetailed ¶
func CompareSchemasDetailed( oldSchema, newSchema *schemaextract.DatabaseSchema, opts *CompareOptions, ) (*diff.MetadataDiff, error)
CompareSchemasDetailed compares two database schemas and returns detailed differences. This is the main entry point for engine-aware schema comparison.
func ConvertYesNo ¶
ConvertYesNo converts MySQL/PostgreSQL YES/NO strings to bool.
func FormatErrorWithQuery ¶
FormatErrorWithQuery wraps an error with the SQL query that caused it.
Types ¶
type CompareOptions ¶
type CompareOptions struct {
// Engine specifies which database engine to use for comparison.
Engine engine.Engine
// IgnoreComments ignores comment differences.
IgnoreComments bool
// IgnoreCharset ignores charset differences (MySQL).
IgnoreCharset bool
// IgnoreCollation ignores collation differences.
IgnoreCollation bool
}
CompareOptions configures schema comparison behavior.
func DefaultCompareOptions ¶
func DefaultCompareOptions(eng engine.Engine) *CompareOptions
DefaultCompareOptions returns default comparison options.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package engine provides database-specific comparison engines for MySQL and PostgreSQL schema comparison.
|
Package engine provides database-specific comparison engines for MySQL and PostgreSQL schema comparison. |
|
base
Package defaultcomparer provides shared comparison utilities and base implementations for database schema comparison engines.
|
Package defaultcomparer provides shared comparison utilities and base implementations for database schema comparison engines. |
|
mysql
Package mysql provides MySQL-specific schema comparison engine.
|
Package mysql provides MySQL-specific schema comparison engine. |
|
postgres
Package postgres provides PostgreSQL-specific schema comparison engine.
|
Package postgres provides PostgreSQL-specific schema comparison engine. |