comparer

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 14, 2025 License: MIT Imports: 7 Imported by: 0

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

func ConvertYesNo(s string) (bool, error)

ConvertYesNo converts MySQL/PostgreSQL YES/NO strings to bool.

func FormatErrorWithQuery

func FormatErrorWithQuery(err error, query string) error

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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL