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
eql?(other)
Alias for: ==
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