Module: PgSaurus::ConnectionAdapters::PostgreSQLAdapter::SchemaMethods
- Included in:
- PgSaurus::ConnectionAdapters::PostgreSQLAdapter
- Defined in:
- lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb
Overview
Provides methods to extend ActiveRecord::ConnectionAdapters::PostgreSQLAdapter to support schemas feature.
Instance Method Summary collapse
-
#create_schema_if_not_exists(schema_name) ⇒ Object
Create schema if it does not exist yet.
-
#current_schema_search_path ⇒ Object
Reads the current schema search path (it may have been altered from the initial value used when creating the connection).
-
#drop_schema_if_exists(schema_name) ⇒ Object
Drop schema if it exists.
-
#drop_table(table_name, options = {}) ⇒ Object
Provide :schema option to
drop_table
method. -
#in_schema(schema_name) ⇒ Object
Execute operations in the context of the schema.
-
#move_table_to_schema(table, schema) ⇒ Object
Move table to another schema.
-
#rename_table(table_name, new_name, options = {}) ⇒ Object
Provide :schema option to
rename_table
method. -
#tables(*args) ⇒ Array<String>
Make method
tables
return tables not only from public schema.
Instance Method Details
#create_schema_if_not_exists(schema_name) ⇒ Object
Create schema if it does not exist yet.
14 15 16 |
# File 'lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb', line 14 def create_schema_if_not_exists(schema_name) ::PgSaurus::Tools.create_schema_if_not_exists(schema_name) end |
#current_schema_search_path ⇒ Object
Reads the current schema search path (it may have been altered from the initial value used when creating the connection)
80 81 82 |
# File 'lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb', line 80 def current_schema_search_path select_value("SHOW search_path;") end |
#drop_schema_if_exists(schema_name) ⇒ Object
Drop schema if it exists.
21 22 23 |
# File 'lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb', line 21 def drop_schema_if_exists(schema_name) ::PgSaurus::Tools.drop_schema_if_exists(schema_name) end |
#drop_table(table_name, options = {}) ⇒ Object
Provide :schema option to drop_table
method.
26 27 28 29 30 31 |
# File 'lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb', line 26 def drop_table(table_name, = {}) = .dup schema_name = .delete(:schema) table_name = "#{schema_name}.#{table_name}" if schema_name super(table_name, **) end |
#in_schema(schema_name) ⇒ Object
Execute operations in the context of the schema
68 69 70 71 72 73 74 75 76 |
# File 'lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb', line 68 def in_schema(schema_name) search_path = current_schema_search_path begin execute("SET search_path TO '%s'" % schema_name) yield ensure execute("SET search_path TO #{search_path};") end end |
#move_table_to_schema(table, schema) ⇒ Object
Move table to another schema
7 8 9 |
# File 'lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb', line 7 def move_table_to_schema(table, schema) ::PgSaurus::Tools.move_table_to_schema(table, schema) end |
#rename_table(table_name, new_name, options = {}) ⇒ Object
Provide :schema option to rename_table
method.
56 57 58 59 60 61 62 63 64 65 |
# File 'lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb', line 56 def rename_table(table_name, new_name, = {}) schema_name = [:schema] if schema_name in_schema schema_name do super(table_name, new_name) end else super(table_name, new_name) end end |
#tables(*args) ⇒ Array<String>
Tables from public schema have no “public.” prefix. It’s done for compatibility with other libraries that relies on a table name. Tables from other schemas has appropriate prefix with schema name. See: github.com/TMXCredit/pg_power/pull/42
Make method tables
return tables not only from public schema.
42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/pg_saurus/connection_adapters/postgresql_adapter/schema_methods.rb', line 42 def tables(*args) public_tables = super(*args) non_public_tables = query(<<-SQL, 'SCHEMA').map { |row| row[0] } SELECT schemaname || '.' || tablename AS table FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'public') SQL public_tables + non_public_tables end |