class Bricolage::SQLStatement
Attributes
declarations[W]
resource[R]
Public Class Methods
delete_where(cond, location = nil)
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 7 def SQLStatement.delete_where(cond, location = nil) for_string("delete from $dest_table where #{cond};", location) end
for_string(sql, location = nil)
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 11 def SQLStatement.for_string(sql, location = nil) new(StringResource.new(sql, location)) end
new(resource, declarations = nil)
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 15 def initialize(resource, declarations = nil) @resource = resource @declarations = declarations @code = nil @replace = nil end
Public Instance Methods
==(other)
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 24 def ==(other) return false unless other.kind_of?(SQLStatement) @resource == other.resource end
Also aliased as: eql?
attributes()
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 93 def attributes Array(meta_data['attributes']) end
bind(ctx, vars)
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 46 def bind(ctx, vars) raise FatalError, "already bound SQL statement: #{@resource.name}" if @code src = ctx.parameter_file_loader.eruby(@resource.content, @resource.name || '-') @code = Variable.expand_string(apply_replace(src)) {|name| val = vars[name] val.respond_to?(:to_sql) ? val.to_sql : val.to_s } end
declarations()
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 35 def declarations @declarations ||= Declarations.parse(@resource) end
hash()
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 31 def hash @resource.hash end
inspect()
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 77 def inspect "\#<#{self.class} #{@resource.inspect}>" end
kind()
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 67 def kind # This implementation is not complete but useful first_word = @resource.content.gsub(%r<'(?:[^']+|'')*'|"(?:[^"]+|"")*"|--.*|/\*(?m:.*?)\*/>, '').strip.slice(/\A\w+/) op = first_word ? first_word.downcase : nil case op when 'with' then 'select' else op end end
location()
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 55 def location @resource.name end
meta_data()
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 89 def meta_data SQLMetaDataParser.new.parse(raw_content) end
raw_content()
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 81 def raw_content @resource.content end
replace(re, subst)
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 41 def replace(re, subst) @replace = [re, subst] self end
source()
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 59 def source @code or raise FatalError, "unbound SQL statement: #{@resource.name}" end
stripped_raw_content()
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 85 def stripped_raw_content strip_sql(raw_content) end
stripped_source()
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 63 def stripped_source strip_sql(source) end
Private Instance Methods
apply_replace(content)
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 99 def apply_replace(content) return content unless @replace re, subst = @replace content.gsub(re, subst) end
strip_sql(src)
click to toggle source
# File lib/bricolage/sqlstatement.rb, line 105 def strip_sql(src) src.sub(%r{\A/\*.*?^\*/}m, '').gsub(/^--.*/, '').strip end