Module: Scrooge::Optimizations::Columns::SingletonMethods

Defined in:
lib/optimizations/columns/macro.rb

Constant Summary collapse

ScroogeBlankString =
"".freeze
ScroogeComma =
",".freeze
ScroogeRegexSanitize =
/(?:LIMIT|WHERE|FROM|GROUP\s*BY|HAVING|ORDER\s*BY|PROCEDURE|FOR\s*UPDATE|INTO\s*OUTFILE).*/i
ScroogeRegexJoin =
/(?:left|inner|outer|cross)*\s*(?:straight_join|join)/i
@@scrooge_select_regexes =
{}

Instance Method Summary collapse

Instance Method Details

#_load(str) ⇒ Object

Marshal.load



50
51
52
# File 'lib/optimizations/columns/macro.rb', line 50

def _load(str)
  Marshal.load(str)
end

#scope_with_scrooge?(sql) ⇒ Boolean

Only scope n-1 rows by default.

Returns:

  • (Boolean)


64
65
66
67
68
# File 'lib/optimizations/columns/macro.rb', line 64

def scope_with_scrooge?( sql )
  sql =~ scrooge_select_regex && 
  column_names.include?(self.primary_key.to_s) &&
  sql !~ ScroogeRegexJoin
end

#scrooge_reload(p_keys, missing_columns) ⇒ Object

Efficient reloading - get the hash with missing attributes directly from the underlying connection.



57
58
59
60
# File 'lib/optimizations/columns/macro.rb', line 57

def scrooge_reload( p_keys, missing_columns )
  sql_keys = p_keys.collect{|pk| "'#{pk}'"}.join(ScroogeComma)
  connection.send( :select, "SELECT #{scrooge_select_sql(missing_columns)} FROM #{quoted_table_name} WHERE #{quoted_table_name}.#{primary_key} IN (#{sql_keys})", "#{name} Scrooge Reload" )
end

#scrooge_seen_column!(callsite_signature, attr_name) ⇒ Object

Augment a given callsite signature with a column / attribute.



38
39
40
# File 'lib/optimizations/columns/macro.rb', line 38

def scrooge_seen_column!( callsite_signature, attr_name )
  scrooge_callsite( callsite_signature ).column!( attr_name )
end

#scrooge_select_sql(set) ⇒ Object

Generates a SELECT snippet for this Model from a given Set of columns



44
45
46
# File 'lib/optimizations/columns/macro.rb', line 44

def scrooge_select_sql( set )
  set.map{|a| attribute_with_table( a ) }.join( ScroogeComma )
end