Class: SQLite3::Query

Inherits:
Object show all
Defined in:
lib/sqlite3/query.rb

Defined Under Namespace

Modules: Description

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sql, statement) ⇒ Query

Returns a new instance of Query.



9
10
11
12
13
14
# File 'lib/sqlite3/query.rb', line 9

def initialize(sql, statement)
  expect! statement => SQLite3::Statement

  @sql, @statement = sql, statement
  @parameters = @sql.scan(/:([a-z]+)/).map(&:first).map(&:to_sym)
end

Instance Attribute Details

#parametersObject (readonly)

all parameters in the query, as Symbols.



7
8
9
# File 'lib/sqlite3/query.rb', line 7

def parameters
  @parameters
end

Instance Method Details

#ask(*args) ⇒ Object



100
101
102
103
104
105
106
107
108
109
# File 'lib/sqlite3/query.rb', line 100

def ask(*args)
  results = run(*args)
  row = results.first
  results.reset

  if !row               then  nil
  elsif row.length == 1 then  row.first
  else                        row
  end
end

#destructive?Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/sqlite3/query.rb', line 16

def destructive?
  @sql !~ /\A\S*SELECT/i
end

#run(*args) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/sqlite3/query.rb', line 20

def run(*args)
  if parameters.length > 0
    named_args = {}

    if args.last.is_a?(Hash)
      args.pop.each do |name, value|
        named_args[name.to_sym] = value
      end
    end

    missing = parameters - named_args.keys
    unless missing.empty?
      raise SQLite3::MissingParameters, "Missing parameter(s): #{missing.inspect}"
    end

    named_args = named_args.select do |name, value|
      parameters.include?(name)
    end
    args << named_args
  end

  @statement.execute *args
end

#select(*args) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
# File 'lib/sqlite3/query.rb', line 44

def select(*args)
  @klass ||= SQLite3::Record.for_columns(@statement.columns)

  ary = run(*args).map do |rec|
    @klass.build *rec
  end

  ary.extend Description
  ary.columns = @statement.columns
  ary
end