class Features
Standardized feature detection for database adapters. All features default to false, and adapters can enable specific capabilities.
Definitions
def enabled?(feature)
Check if a specific feature is enabled.
Implementation
def enabled?(feature)
@features.fetch(feature, false)
end
def enabled_features
Get all enabled features.
Implementation
def enabled_features
@features.select{|_, enabled| enabled}.keys
end
def with(**additional_features)
Create a new Features instance with additional or modified features.
Implementation
def with(**additional_features)
self.class.new(**@features, **additional_features)
end
def alter_column_type?
PostgreSQL-style column type modification: ALTER COLUMN name TYPE type USING expression.
Implementation
def alter_column_type?
@features.fetch(:alter_column_type, false)
end
def modify_column?
MySQL-style column modification: MODIFY COLUMN name type.
Implementation
def modify_column?
@features.fetch(:modify_column, false)
end
def using_clause?
Support for USING clause in column type changes.
Implementation
def using_clause?
@features.fetch(:using_clause, false)
end
def conditional_operations?
Support for IF EXISTS/IF NOT EXISTS clauses.
Implementation
def conditional_operations?
@features.fetch(:conditional_operations, false)
end
def transactional_schema?
Schema operations can be rolled back within transactions.
Implementation
def transactional_schema?
@features.fetch(:transactional_schema, false)
end
def batch_alter_table?
Multiple operations can be combined in a single ALTER TABLE statement.
Implementation
def batch_alter_table?
@features.fetch(:batch_alter_table, false)
end
def concurrent_schema?
Support for concurrent/online schema changes.
Implementation
def concurrent_schema?
@features.fetch(:concurrent_schema, false)
end
def deferred_constraints?
Support for adding constraints with validation deferred.
Implementation
def deferred_constraints?
@features.fetch(:deferred_constraints, false)
end
def serial_columns?
PostgreSQL-style SERIAL/BIGSERIAL auto-increment columns.
Implementation
def serial_columns?
@features.fetch(:serial_columns, false)
end
def auto_increment?
MySQL-style AUTO_INCREMENT auto-increment columns.
Implementation
def auto_increment?
@features.fetch(:auto_increment, false)
end
def integer_primary_key_autoincrement?
SQLite-style INTEGER PRIMARY KEY auto-increment.
Implementation
def integer_primary_key_autoincrement?
@features.fetch(:integer_primary_key_autoincrement, false)
end
def identity_columns?
Support for IDENTITY columns (SQL Server/newer PostgreSQL).
Implementation
def identity_columns?
@features.fetch(:identity_columns, false)
end