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
Inspect the query instance showing the class and current buffer contents.
-
#interpolate(fragment, **parameters) ⇒ Object
Interpolate a query fragment with the specified parameters.
-
#key_column(*arguments, **options) ⇒ Object
Generate a key column expression based on the connection’s requirements.
-
#literal(value) ⇒ Object
Append a literal value to the query buffer.
-
#to_s ⇒ Object
Get the string representation of the query buffer.
Constructor Details
#initialize(context, buffer = String.new) ⇒ Query
Create a new query builder attached to the specified context.
36 37 38 39 40 |
# File 'lib/db/query.rb', line 36 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.
110 111 112 113 |
# File 'lib/db/query.rb', line 110 def call(&block) # Console.debug(self, "Executing query...", buffer: @buffer) @context.call(@buffer, &block) end |
#clause(value) ⇒ Object
Append a raw textual clause to the query buffer.
45 46 47 48 49 50 51 |
# File 'lib/db/query.rb', line 45 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.
69 70 71 72 73 74 75 |
# File 'lib/db/query.rb', line 69 def identifier(value) @buffer << " " unless @buffer.end_with?(" ") @connection.append_identifier(value, @buffer) return self end |
#inspect ⇒ Object
Inspect the query instance showing the class and current buffer contents.
123 124 125 |
# File 'lib/db/query.rb', line 123 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.
83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/db/query.rb', line 83 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
Generate a key column expression based on the connection’s requirements.
102 103 104 105 106 |
# File 'lib/db/query.rb', line 102 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.
57 58 59 60 61 62 63 |
# File 'lib/db/query.rb', line 57 def literal(value) @buffer << " " unless @buffer.end_with?(" ") @connection.append_literal(value, @buffer) return self end |
#to_s ⇒ Object
Get the string representation of the query buffer.
117 118 119 |
# File 'lib/db/query.rb', line 117 def to_s @buffer end |