DBSourceDBFeatures

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