module Sequel::ColumnsIntrospection
Public Instance Methods
Source
# File lib/sequel/extensions/columns_introspection.rb 30 def columns 31 if cols = _columns 32 return cols 33 end 34 if (pcs = probable_columns) && pcs.all? 35 self.columns = pcs 36 else 37 super 38 end 39 end
Attempt to guess the columns that will be returned if there are columns selected, in order to skip a database query to retrieve the columns. This should work with Symbols, SQL::Identifiers, SQL::QualifiedIdentifiers, and SQL::AliasedExpressions.
Calls superclass method
Protected Instance Methods
Source
# File lib/sequel/extensions/columns_introspection.rb 46 def probable_columns 47 if (cols = opts[:select]) && !cols.empty? 48 cols.map{|c| probable_column_name(c)} 49 elsif !opts[:join] && !opts[:with] && (from = opts[:from]) && from.length == 1 && (from = from.first) 50 if from.is_a?(SQL::AliasedExpression) 51 from = from.expression 52 end 53 54 case from 55 when Dataset 56 from.probable_columns 57 when Symbol, SQL::Identifier, SQL::QualifiedIdentifier 58 schemas = db.instance_variable_get(:@schemas) 59 if schemas && (table = literal(from)) && (sch = Sequel.synchronize{schemas[table]}) 60 sch.map{|c,_| c} 61 end 62 end 63 end 64 end
Return an array of probable column names for the dataset, or nil if it is not possible to determine that through introspection.
Private Instance Methods
Source
# File lib/sequel/extensions/columns_introspection.rb 70 def probable_column_name(c) 71 case c 72 when Symbol 73 _, c, a = split_symbol(c) 74 (a || c).to_sym 75 when SQL::Identifier 76 c.value.to_sym 77 when SQL::QualifiedIdentifier 78 c.column.to_sym 79 when SQL::AliasedExpression 80 a = c.alias 81 a.is_a?(SQL::Identifier) ? a.value.to_sym : a.to_sym 82 end 83 end
Return the probable name of the column, or nil if one cannot be determined.