Class: Sequel::MySQL::Dataset

Inherits:
Dataset show all
Includes:
DatasetMethods, StoredProcedures
Defined in:
lib/sequel/adapters/mysql.rb

Overview

Dataset class for MySQL datasets accessed via the native driver.

Defined Under Namespace

Modules: CallableStatementMethods, PreparedStatementMethods, StoredProcedureMethods

Constant Summary

Constants included from DatasetMethods

Sequel::MySQL::DatasetMethods::BOOL_FALSE, Sequel::MySQL::DatasetMethods::BOOL_TRUE, Sequel::MySQL::DatasetMethods::COMMA_SEPARATOR, Sequel::MySQL::DatasetMethods::SELECT_CLAUSE_ORDER, Sequel::MySQL::DatasetMethods::TIMESTAMP_FORMAT

Constants inherited from Dataset

Dataset::AND_SEPARATOR, Dataset::ARRAY_ACCESS_ERROR_MSG, Dataset::BOOL_FALSE, Dataset::BOOL_TRUE, Dataset::COLUMN_CHANGE_OPTS, Dataset::COLUMN_REF_RE1, Dataset::COLUMN_REF_RE2, Dataset::COLUMN_REF_RE3, Dataset::COMMA_SEPARATOR, Dataset::COUNT_FROM_SELF_OPTS, Dataset::COUNT_OF_ALL_AS_COUNT, Dataset::DATASET_ALIAS_BASE_NAME, Dataset::GET_ERROR_MSG, Dataset::IMPORT_ERROR_MSG, Dataset::INSERT_SQL_BASE, Dataset::IS_LITERALS, Dataset::IS_OPERATORS, Dataset::MAP_ERROR_MSG, Dataset::MUTATION_METHODS, Dataset::NOTIMPL_MSG, Dataset::NULL, Dataset::N_ARITY_OPERATORS, Dataset::PREPARED_ARG_PLACEHOLDER, Dataset::QUALIFY_KEYS, Dataset::QUESTION_MARK, Dataset::SELECT_CLAUSE_ORDER, Dataset::SQL_WITH, Dataset::STOCK_COUNT_OPTS, Dataset::TWO_ARITY_OPERATORS, Dataset::WILDCARD, Dataset::WITH_SUPPORTED

Instance Attribute Summary

Attributes inherited from Dataset

#db, #identifier_input_method, #identifier_output_method, #opts, #quote_identifiers, #row_proc

Instance Method Summary collapse

Methods included from DatasetMethods

#complex_expression_sql, #delete_sql, #full_text_search, #full_text_sql, #having, #insert_ignore, #join_table, #join_type_sql, #multi_insert_sql, #on_duplicate_key_update, #quoted_identifier, #replace_sql, #supports_distinct_on?, #supports_intersect_except?, #update_sql

Methods inherited from Dataset

#<<, #[], #[]=, #add_graph_aliases, #aliased_expression_sql, #all, #and, #array_sql, #as, #avg, #case_expression_sql, #cast_sql, #clone, #column_all_sql, #columns, #columns!, #complex_expression_sql, #count, def_mutation_method, #def_mutation_method, #delete_sql, #distinct, #each, #each_page, #empty?, #except, #exclude, #exists, #filter, #first, #first_source_alias, #from, #from_self, #function_sql, #get, #graph, #grep, #group, #group_and_count, #having, #import, #initialize, #insert_multiple, #insert_sql, #inspect, #intersect, #interval, #invert, #join_clause_sql, #join_on_clause_sql, #join_table, #join_using_clause_sql, #last, #limit, #literal, #map, #max, #min, #multi_insert, #multi_insert_sql, #naked, #or, #order, #order_more, #ordered_expression_sql, #paginate, #placeholder_literal_string_sql, #print, #qualified_identifier_sql, #qualify, #qualify_to, #qualify_to_first_source, #query, #quote_identifier, #quote_identifiers?, #quote_schema_table, #quoted_identifier, #range, #requires_sql_standard_datetimes?, #reverse_order, #schema_and_table, #select, #select_all, #select_more, #select_sql, #server, #set, #set_defaults, #set_graph_aliases, #set_overrides, #single_record, #single_value, #sql, #subscript_sql, #sum, #supports_cte?, #supports_distinct_on?, #supports_intersect_except?, #supports_intersect_except_all?, #supports_is_true?, #supports_window_functions?, #to_csv, #to_hash, #unfiltered, #ungraphed, #union, #unordered, #update_sql, #where, #window_function_sql, #window_sql, #with, #with_recursive, #with_sql

Methods included from Sequel::Metaprogramming

#meta_def

Constructor Details

This class inherits a constructor from Sequel::Dataset

Instance Method Details

#call(type, bind_arguments = {}, values = nil) ⇒ Object

MySQL is different in that it supports prepared statements but not bound variables outside of prepared statements. The default implementation breaks the use of subselects in prepared statements, so extend the temporary prepared statement that this creates with a module that fixes it.



285
286
287
288
289
# File 'lib/sequel/adapters/mysql.rb', line 285

def call(type, bind_arguments={}, values=nil)
  ps = to_prepared_statement(type, values)
  ps.extend(CallableStatementMethods)
  ps.call(bind_arguments)
end

#deleteObject

Delete rows matching this dataset



292
293
294
# File 'lib/sequel/adapters/mysql.rb', line 292

def delete
  execute_dui(delete_sql){|c| c.affected_rows}
end

#fetch_rows(sql) ⇒ Object

Yield all rows matching this dataset



297
298
299
300
301
302
303
304
305
306
307
308
309
# File 'lib/sequel/adapters/mysql.rb', line 297

def fetch_rows(sql)
  execute(sql) do |r|
    i = -1
    cols = r.fetch_fields.map{|f| [output_identifier(f.name), MYSQL_TYPES[f.type], i+=1]}
    @columns = cols.map{|c| c.first}
    while row = r.fetch_row
      h = {}
      cols.each{|n, p, i| v = row[i]; h[n] = (v && p) ? p.call(v) : v}
      yield h
    end
  end
  self
end

#insert(*values) ⇒ Object

Insert a new value into this dataset



312
313
314
# File 'lib/sequel/adapters/mysql.rb', line 312

def insert(*values)
  execute_dui(insert_sql(*values)){|c| c.insert_id}
end

#prepare(type, name = nil, values = nil) ⇒ Object

Store the given type of prepared statement in the associated database with the given name.



318
319
320
321
322
323
324
325
326
# File 'lib/sequel/adapters/mysql.rb', line 318

def prepare(type, name=nil, values=nil)
  ps = to_prepared_statement(type, values)
  ps.extend(PreparedStatementMethods)
  if name
    ps.prepared_statement_name = name
    db.prepared_statements[name] = ps
  end
  ps
end

#replace(*args) ⇒ Object

Replace (update or insert) the matching row.



329
330
331
# File 'lib/sequel/adapters/mysql.rb', line 329

def replace(*args)
  execute_dui(replace_sql(*args)){|c| c.insert_id}
end

#update(values = {}) ⇒ Object

Update the matching rows.



334
335
336
# File 'lib/sequel/adapters/mysql.rb', line 334

def update(values={})
  execute_dui(update_sql(values)){|c| c.affected_rows}
end