Class: Sequel::MySQL::Dataset

Inherits:
Dataset show all
Includes:
DatasetMethods, StoredProcedures
Defined in:
lib/sequel_core/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

Constants inherited from Dataset

Dataset::AND_SEPARATOR, 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_CLASSES, Dataset::DATE_FORMAT, Dataset::MUTATION_METHODS, Dataset::NOTIMPL_MSG, Dataset::NULL, Dataset::N_ARITY_OPERATORS, Dataset::PREPARED_ARG_PLACEHOLDER, Dataset::QUESTION_MARK, Dataset::SELECT_CLAUSE_ORDER, Dataset::STOCK_COUNT_OPTS, Dataset::STOCK_TRANSFORMS, Dataset::TIMESTAMP_FORMAT, Dataset::TWO_ARITY_OPERATORS, Dataset::WILDCARD

Instance Attribute Summary

Attributes inherited from Dataset

#db, #opts, #quote_identifiers, #row_proc, #upcase_identifiers

Instance Method Summary collapse

Methods included from DatasetMethods

#complex_expression_sql, #delete_sql, #full_text_search, #having, #insert_default_values_sql, #join_table, #join_type_sql, #multi_insert_sql, #quoted_identifier, #replace_sql, #update_sql

Methods included from Dataset::UnsupportedIntersectExcept

#except, #intersect

Methods inherited from Dataset

#<<, #[], #[]=, #add_graph_aliases, #aliased_expression_sql, #all, #and, #array_sql, #as, #avg, #case_expression_sql, #clone, #column_all_sql, #columns, #columns!, #complex_expression_sql, #count, #create_or_replace_view, #create_view, dataset_classes, #def_mutation_method, def_mutation_method, #delete_sql, #each, #each_page, #empty?, #except, #exclude, #exists, #filter, #first, #first_source, #from, #from_self, #function_sql, #get, #graph, #grep, #group, #group_and_count, #having, inherited, #initialize, #insert_multiple, #insert_sql, #inspect, #intersect, #interval, #invert, #irregular_function_sql, #join_clause_sql, #join_on_clause_sql, #join_table, #join_using_clause_sql, #last, #limit, #map, #max, #min, #model_classes, #multi_insert, #multi_insert_sql, #naked, #or, #order, #order_more, #ordered_expression_sql, #paginate, #placeholder_literal_string_sql, #polymorphic_key, #print, #qualified_identifier_sql, #query, #quote_identifier, #quote_identifiers?, #quote_schema_table, #quoted_identifier, #range, #reverse_order, #schema_and_table, #select, #select_all, #select_more, #select_sql, #server, #set, #set_defaults, #set_graph_aliases, #set_model, #set_overrides, #single_record, #single_value, #sql, #subscript_sql, #sum, #symbol_to_column_ref, #table_exists?, #to_csv, #to_hash, #transform, #transform_load, #transform_save, #unfiltered, #union, #uniq, #unordered, #upcase_identifiers?, #update_sql

Methods included from Enumerable

#send_each

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.



305
306
307
308
309
# File 'lib/sequel_core/adapters/mysql.rb', line 305

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

#delete(opts = nil) ⇒ Object

Delete rows matching this dataset



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

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

#fetch_rows(sql) ⇒ Object

Yield all rows matching this dataset



317
318
319
320
321
322
323
# File 'lib/sequel_core/adapters/mysql.rb', line 317

def fetch_rows(sql)
  execute(sql) do |r|
    @columns = r.columns
    r.sequel_each_hash {|row| yield row}
  end
  self
end

#insert(*values) ⇒ Object

Insert a new value into this dataset



326
327
328
# File 'lib/sequel_core/adapters/mysql.rb', line 326

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

#literal(v) ⇒ Object

Handle correct quoting of strings using ::MySQL.quote.



331
332
333
334
335
336
337
338
339
340
# File 'lib/sequel_core/adapters/mysql.rb', line 331

def literal(v)
  case v
  when LiteralString
    v
  when String
    "'#{::Mysql.quote(v)}'"
  else
    super
  end
end

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

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



344
345
346
347
348
349
350
351
352
# File 'lib/sequel_core/adapters/mysql.rb', line 344

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.



355
356
357
# File 'lib/sequel_core/adapters/mysql.rb', line 355

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

#update(*args) ⇒ Object

Update the matching rows.



360
361
362
# File 'lib/sequel_core/adapters/mysql.rb', line 360

def update(*args)
  execute_dui(update_sql(*args)){|c| c.affected_rows}
end