Class: DBI::BaseStatement
- Defined in:
- lib/dbi/base_classes/statement.rb
Overview
StatementHandles are used to encapsulate the process of managing a statement (DDL or DML) and its parameters, sending it to the database, and gathering any results from the execution of that statement.
As with the other Base classes, the terms "DBD Required" and "DBD
Optional" are defined in DBI::BaseDatabase.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#raise_error ⇒ Object
Returns the value of attribute raise_error.
Instance Method Summary collapse
-
#[](attr) ⇒ Object
Get statement attributes.
-
#[]=(attr, value) ⇒ Object
Set statement attributes.
-
#bind_param(param, value, attribs) ⇒ Object
Bind a parameter to the statement.
-
#bind_params(bindvars) ⇒ Object
Take a list of bind variables and bind them successively using bind_param.
-
#cancel ⇒ Object
Cancel any result cursors.
-
#column_info ⇒ Object
returns result-set column information as array of hashs, where each hash represents one column.
-
#execute ⇒ Object
Execute the statement with the known binds.
-
#fetch ⇒ Object
Fetch the next row in the result set.
-
#fetch_all ⇒ Object
Fetch all available rows.
-
#fetch_many(cnt) ⇒ Object
fetch x rows.
-
#fetch_scroll(direction, offset) ⇒ Object
fetch_scroll is provided with a direction and offset and works similar to how seek() is used on files.
-
#finish ⇒ Object
Close the statement and any result cursors.
-
#initialize(attr = nil) ⇒ BaseStatement
constructor
A new instance of BaseStatement.
Constructor Details
#initialize(attr = nil) ⇒ BaseStatement
Returns a new instance of BaseStatement.
14 15 16 |
# File 'lib/dbi/base_classes/statement.rb', line 14 def initialize(attr=nil) @attr = attr || {} end |
Instance Attribute Details
#raise_error ⇒ Object
Returns the value of attribute raise_error.
12 13 14 |
# File 'lib/dbi/base_classes/statement.rb', line 12 def raise_error @raise_error end |
Instance Method Details
#[](attr) ⇒ Object
Get statement attributes.
158 159 160 161 |
# File 'lib/dbi/base_classes/statement.rb', line 158 def [](attr) @attr ||= { } @attr[attr] end |
#[]=(attr, value) ⇒ Object
Set statement attributes. DBD Optional.
166 167 168 |
# File 'lib/dbi/base_classes/statement.rb', line 166 def []=(attr, value) raise NotSupportedError end |
#bind_param(param, value, attribs) ⇒ Object
Bind a parameter to the statement. DBD Required.
The parameter number is named in a hash. This corresponds to the parameter symbols (@param_name) in the statement
The value may be any ruby type. How these are handled is DBD-dependent, but the vast majority of DBDs will convert these to string inside the query.
28 29 30 |
# File 'lib/dbi/base_classes/statement.rb', line 28 def bind_param(param, value, attribs) raise NotImplementedError end |
#bind_params(bindvars) ⇒ Object
Take a list of bind variables and bind them successively using bind_param.
73 74 75 76 |
# File 'lib/dbi/base_classes/statement.rb', line 73 def bind_params(bindvars) bindvars.each {|k, v| bind_param(k, v, nil) } self end |
#cancel ⇒ Object
Cancel any result cursors. DBD Optional, but intentionally does not raise any exception as it's used internally to maintain consistency.
82 83 |
# File 'lib/dbi/base_classes/statement.rb', line 82 def cancel end |
#column_info ⇒ Object
returns result-set column information as array of hashs, where each hash represents one column. See BaseDatabase#columns. DBD Required.
62 63 64 |
# File 'lib/dbi/base_classes/statement.rb', line 62 def column_info raise NotImplementedError end |
#execute ⇒ Object
Execute the statement with the known binds. DBD Required.
35 36 37 |
# File 'lib/dbi/base_classes/statement.rb', line 35 def execute raise NotImplementedError end |
#fetch ⇒ Object
Fetch the next row in the result set. DBD Required.
DBI::Row is responsible for formatting the data the DBD provides it.
53 54 55 |
# File 'lib/dbi/base_classes/statement.rb', line 53 def fetch raise NotImplementedError end |
#fetch_all ⇒ Object
Fetch all available rows. Result is Array of DBI::Row.
140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/dbi/base_classes/statement.rb', line 140 def fetch_all rows = [] loop do row = fetch break if row.nil? rows << row.dup end if rows.empty? nil else rows end end |
#fetch_many(cnt) ⇒ Object
fetch x rows. The result is Array of DBI::Row.
122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/dbi/base_classes/statement.rb', line 122 def fetch_many(cnt) rows = [] cnt.times do row = fetch break if row.nil? rows << row.dup end if rows.empty? nil else rows end end |
#fetch_scroll(direction, offset) ⇒ Object
fetch_scroll is provided with a direction and offset and works similar to how seek() is used on files.
The constants available for direction are as follows:
- SQL_FETCH_NEXT: fetch the next result.
- SQL_FETCH_LAST: fetch the last result, period.
- SQL_FETCH_RELATIVE: fetch the result at the offset.
Other constants can be used, but if this method is not supplied by the driver, they will result in a raise of DBI::NotSupportedError.
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/dbi/base_classes/statement.rb', line 99 def fetch_scroll(direction, offset) case direction when SQL_FETCH_NEXT return fetch when SQL_FETCH_LAST last_row = nil while (row=fetch) != nil last_row = row end return last_row when SQL_FETCH_RELATIVE raise NotSupportedError if offset <= 0 row = nil offset.times { row = fetch; break if row.nil? } return row else raise NotSupportedError end end |
#finish ⇒ Object
Close the statement and any result cursors. DBD Required.
- Note
Most implementations will fail miserably if you forget to finish your statement handles.
44 45 46 |
# File 'lib/dbi/base_classes/statement.rb', line 44 def finish raise NotImplementedError end |