Class: DB::Query
- Inherits:
-
Object
- Object
- DB::Query
- Defined in:
- lib/db/query.rb
Overview
A mutable query builder.
Instance Method Summary collapse
-
#call(&block) ⇒ Object
Send the query to the remote server to be executed.
-
#clause(value) ⇒ Object
Append a raw textual clause to the query buffer.
-
#identifier(value) ⇒ Object
Append an identifier value to the query buffer.
-
#initialize(context, buffer = String.new) ⇒ Query
constructor
Create a new query builder attached to the specified context.
- #inspect ⇒ Object
-
#interpolate(fragment, **parameters) ⇒ Object
Interpolate a query fragment with the specified parameters.
- #key_column(*arguments, **options) ⇒ Object
-
#literal(value) ⇒ Object
Append a literal value to the query buffer.
- #to_s ⇒ Object
Constructor Details
#initialize(context, buffer = String.new) ⇒ Query
Create a new query builder attached to the specified context.
48 49 50 51 52 |
# File 'lib/db/query.rb', line 48 def initialize(context, buffer = String.new) @context = context @connection = context.connection @buffer = +buffer end |
Instance Method Details
#call(&block) ⇒ Object
Send the query to the remote server to be executed. See Context::Session#call for more details.
118 119 120 121 122 123 124 125 126 |
# File 'lib/db/query.rb', line 118 def call(&block) if block_given? @context.call(@buffer, &block) else @context.call(@buffer) do |connection| return connection.next_result end end end |
#clause(value) ⇒ Object
Append a raw textual clause to the query buffer.
57 58 59 60 61 62 63 |
# File 'lib/db/query.rb', line 57 def clause(value) @buffer << ' ' unless @buffer.end_with?(' ') || @buffer.empty? @buffer << value return self end |
#identifier(value) ⇒ Object
Append an identifier value to the query buffer. Escapes the field according to the requirements of the underlying connection.
81 82 83 84 85 86 87 |
# File 'lib/db/query.rb', line 81 def identifier(value) @buffer << ' ' unless @buffer.end_with?(' ') @connection.append_identifier(value, @buffer) return self end |
#inspect ⇒ Object
132 133 134 |
# File 'lib/db/query.rb', line 132 def inspect "\#<#{self.class} #{@buffer.inspect}>" end |
#interpolate(fragment, **parameters) ⇒ Object
Interpolate a query fragment with the specified parameters. The parameters are escaped before being appended.
95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/db/query.rb', line 95 def interpolate(fragment, **parameters) parameters.transform_values! do |value| case value when Symbol, Identifier @connection.append_identifier(value) else @connection.append_literal(value) end end @buffer << sprintf(fragment, parameters) return self end |
#key_column(*arguments, **options) ⇒ Object
110 111 112 113 114 |
# File 'lib/db/query.rb', line 110 def key_column(*arguments, **) @buffer << @connection.key_column(*arguments, **) return self end |
#literal(value) ⇒ Object
Append a literal value to the query buffer. Escapes the field according to the requirements of the underlying connection.
69 70 71 72 73 74 75 |
# File 'lib/db/query.rb', line 69 def literal(value) @buffer << ' ' unless @buffer.end_with?(' ') @connection.append_literal(value, @buffer) return self end |
#to_s ⇒ Object
128 129 130 |
# File 'lib/db/query.rb', line 128 def to_s @buffer end |