Architecture Changes: - Split dialect implementations into separate files for better organization - Move SQLite dialect from dialect.go to sqlite.go - Keep only Dialect interface in dialect.go with comprehensive documentation - Each dialect now in its own file following single responsibility principle New Features: - Add PostgreSQL dialect support (Postgres() function) - PostgreSQL uses SERIAL PRIMARY KEY (auto-incrementing integer) - PostgreSQL uses $1, $2 placeholders instead of ? for parameters - PostgreSQL uses SELECT 1 for table existence check (more efficient) - Both dialects implement proper SQL identifier quoting for security Testing: - Add comprehensive dialect-specific tests in sqlite_test.go - Add comprehensive dialect-specific tests in postgres_test.go - Test SQL generation for all dialect methods - Test SQL injection protection via identifier escaping - All tests pass (8 test functions, 10 subtests) Documentation: - Update README with PostgreSQL usage example - Add "Supported Databases" section listing SQLite and PostgreSQL - Improve code examples with proper imports and error handling - Document how to implement Dialect interface for other databases File Structure: - dialect.go: Interface definition only (18 lines) - sqlite.go: SQLite dialect implementation (39 lines) - postgres.go: PostgreSQL dialect implementation (42 lines) - sqlite_test.go: SQLite dialect tests (67 lines) - postgres_test.go: PostgreSQL dialect tests (67 lines) Security: - Both dialects use quoteIdentifier() for SQL injection protection - Identifiers are quoted and internal quotes are escaped - Follows SQL standard quoting mechanism (double quotes for escaping) This change maintains backward compatibility while adding PostgreSQL support and improving code organization for future dialect additions.
19 lines
640 B
Go
Executable File
19 lines
640 B
Go
Executable File
package migrate
|
|
|
|
// Dialect defines the interface for database-specific SQL generation.
|
|
// Implementations must provide SQL statements for creating and managing
|
|
// the migration version table.
|
|
type Dialect interface {
|
|
// CreateTable returns SQL to create the migration version table
|
|
CreateTable(table string) string
|
|
|
|
// TableExists returns SQL to check if the migration version table exists
|
|
TableExists(table string) string
|
|
|
|
// CheckVersion returns SQL to get the current migration version
|
|
CheckVersion(table string) string
|
|
|
|
// InsertVersion returns SQL to insert a new migration version record
|
|
InsertVersion(table string) string
|
|
}
|