Class: SQLite3::Query
Defined Under Namespace
Modules: Description
Instance Attribute Summary collapse
-
#parameters ⇒ Object
readonly
all parameters in the query, as Symbols.
Instance Method Summary collapse
- #ask(*args) ⇒ Object
- #destructive? ⇒ Boolean
-
#initialize(sql, statement) ⇒ Query
constructor
A new instance of Query.
- #run(*args) ⇒ Object
- #select(*args) ⇒ Object
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
#parameters ⇒ Object (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
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 |