Method: Sequel::Database#schema
- Defined in:
- lib/sequel/database/schema_sql.rb
#schema(table = nil, opts = {}) ⇒ Object
Parse the schema from the database. If the table_name is not given, returns the schema for all tables as a hash. If the table_name is given, returns the schema for a single table as an array with all members being arrays of length 2. Available options are:
-
:reload - Get fresh information from the database, instead of using cached information. If table_name is blank, :reload should be used unless you are sure that schema has not been called before with a table_name, otherwise you may only getting the schemas for tables that have been requested explicitly.
-
:schema - An explicit schema to use. It may also be implicitly provided via the table name.
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 |
# File 'lib/sequel/database/schema_sql.rb', line 220 def schema(table = nil, opts={}) Deprecation.deprecate('Calling Database#schema without a table argument', 'Use database.tables.inject({}){|h, m| h[m] = database.schema(m); h}') unless table raise(Error, 'schema parsing is not implemented on this database') unless respond_to?(:schema_parse_table, true) if table sch, table_name = schema_and_table(table) quoted_name = quote_schema_table(table) end opts = opts.merge(:schema=>sch) if sch && !opts.include?(:schema) if opts[:reload] && @schemas if table_name @schemas.delete(quoted_name) else @schemas = nil end end if @schemas if table_name return @schemas[quoted_name] if @schemas[quoted_name] else return @schemas end end raise(Error, '#tables does not exist, you must provide a specific table to #schema') if table.nil? && !respond_to?(:tables, true) @schemas ||= Hash.new do |h,k| quote_name = quote_schema_table(k) h[quote_name] if h.include?(quote_name) end if table_name cols = schema_parse_table(table_name, opts) raise(Error, 'schema parsing returned no columns, table probably doesn\'t exist') if cols.nil? || cols.empty? @schemas[quoted_name] = cols else tables.each{|t| @schemas[quote_schema_table(t)] = schema_parse_table(t.to_s, opts)} @schemas end end |