Method: RSQL::MySQLResults.query
- Defined in:
- lib/rsql/mysql_results.rb
.query(sql, eval_context, raw = false, max_rows = @@max_rows) ⇒ Object
Get results from a query.
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 |
# File 'lib/rsql/mysql_results.rb', line 199 def query(sql, eval_context, raw=false, max_rows=@@max_rows) if @@conn.reconnected? # make sure we stick with the user's last database in case # we had to reconnect (probably because the query thread was # killed @@conn.select_db(@@database_name) if @@database_name end @@history.shift if @@max_history <= @@history.size @@history << sql start = Time.now.to_f results = @@conn.query(sql) elapsed = Time.now.to_f - start.to_f affected_rows = @@conn.affected_rows unless results && 0 < results.num_rows return new(nil, nil, affected_rows, sql, elapsed) end if max_rows < results.num_rows raise MaxRowsException.new(results.num_rows, max_rows) end # extract mysql results into our own table so we can # predetermine the lengths of columns and give users a chance to # reformat column data before it's displayed (via the bang maps) fields = results.fetch_fields extend_fields!(fields) results_table = [] while vals = results.fetch_row row = [] fields.each_with_index do |field, i| val = vals[i] orig_vlen = val.respond_to?(:length) ? val.length : 0 if val && field.is_num? val = field.decimals == 0 ? val.to_i : val.to_f end unless raw val = eval_context.bang_eval(field.name, val) if val.nil? val = 'NULL' elsif HEX_RANGE.include?(field.type) && val =~ /[^[:print:]\s]/ val = eval_context.to_hexstr(val) end end update_longest!(field, val, orig_vlen) row << val end results_table << row end return new(fields, results_table, affected_rows, sql, elapsed) end |