Class: Sequel::MySQL::Dataset
- 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::DELETE_CLAUSE_METHODS, Sequel::MySQL::DatasetMethods::FOR_SHARE, Sequel::MySQL::DatasetMethods::INSERT_CLAUSE_METHODS, Sequel::MySQL::DatasetMethods::SELECT_CLAUSE_METHODS, Sequel::MySQL::DatasetMethods::UPDATE_CLAUSE_METHODS
Constants inherited from Dataset
Dataset::ACTION_METHODS, Dataset::AND_SEPARATOR, Dataset::ARG_BLOCK_ERROR_MSG, 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::CONDITIONED_JOIN_TYPES, Dataset::COUNT_FROM_SELF_OPTS, Dataset::COUNT_OF_ALL_AS_COUNT, Dataset::DATASET_ALIAS_BASE_NAME, Dataset::DELETE_CLAUSE_METHODS, Dataset::FOR_UPDATE, Dataset::IMPORT_ERROR_MSG, Dataset::INSERT_CLAUSE_METHODS, Dataset::IS_LITERALS, Dataset::IS_OPERATORS, Dataset::JOIN_METHODS, Dataset::MUTATION_METHODS, Dataset::NON_SQL_OPTIONS, Dataset::NOTIMPL_MSG, Dataset::NULL, Dataset::N_ARITY_OPERATORS, Dataset::PREPARED_ARG_PLACEHOLDER, Dataset::QUALIFY_KEYS, Dataset::QUERY_METHODS, Dataset::QUESTION_MARK, Dataset::SELECT_CLAUSE_METHODS, Dataset::SQL_WITH, Dataset::STANDARD_TIMESTAMP_FORMAT, Dataset::TIMESTAMP_FORMAT, Dataset::TWO_ARITY_OPERATORS, Dataset::UNCONDITIONED_JOIN_TYPES, Dataset::UPDATE_CLAUSE_METHODS, 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
-
#call(type, bind_arguments = {}, *values, &block) ⇒ Object
MySQL is different in that it supports prepared statements but not bound variables outside of prepared statements.
-
#delete ⇒ Object
Delete rows matching this dataset.
-
#fetch_rows(sql, &block) ⇒ Object
Yield all rows matching this dataset.
-
#graph ⇒ Object
Don’t allow graphing a dataset that splits multiple statements.
-
#insert(*values) ⇒ Object
Insert a new value into this dataset.
-
#prepare(type, name = nil, *values) ⇒ Object
Store the given type of prepared statement in the associated database with the given name.
-
#replace(*args) ⇒ Object
Replace (update or insert) the matching row.
-
#split_multiple_result_sets ⇒ Object
Makes each yield arrays of rows, with each array containing the rows for a given result set.
-
#update(values = {}) ⇒ Object
Update the matching rows.
Methods included from DatasetMethods
#complex_expression_sql, #distinct, #for_share, #full_text_search, #full_text_sql, #having, #insert_ignore, #join_table, #join_type_sql, #multi_insert_sql, #on_duplicate_key_update, #provides_accurate_rows_matched?, #quoted_identifier, #replace_sql, #supports_distinct_on?, #supports_intersect_except?, #supports_modifying_joins?, #supports_timestamp_usecs?
Methods inherited from Dataset
#<<, #==, #[], #[]=, #add_graph_aliases, #aliased_expression_sql, #all, #and, #array_sql, #as, #avg, #bind, #boolean_constant_sql, #case_expression_sql, #cast_sql, clause_methods, #clone, #column_all_sql, #columns, #columns!, #complex_expression_sql, #constant_sql, #count, def_mutation_method, #def_mutation_method, #delete_sql, #distinct, #each, #each_page, #each_server, #empty?, #eql?, #except, #exclude, #exists, #filter, #first, #first_source, #first_source_alias, #first_source_table, #for_update, #from, #from_self, #function_sql, #get, #grep, #group, #group_and_count, #group_by, #hash, #having, #import, #initialize, #insert_multiple, #insert_sql, #inspect, #intersect, #interval, #invert, #join, #join_clause_sql, #join_on_clause_sql, #join_table, #join_using_clause_sql, #last, #limit, #literal, #lock_style, #map, #max, #min, #multi_insert, #multi_insert_sql, #naked, #negative_boolean_constant_sql, #or, #order, #order_append, #order_by, #order_more, #order_prepend, #ordered_expression_sql, #paginate, #placeholder_literal_string_sql, #print, #provides_accurate_rows_matched?, #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, #reverse_order, #schema_and_table, #select, #select_all, #select_append, #select_hash, #select_map, #select_more, #select_order_map, #select_sql, #server, #set, #set_defaults, #set_graph_aliases, #set_overrides, #single_record, #single_value, #split_alias, #sql, #subscript_sql, #sum, #supports_cte?, #supports_distinct_on?, #supports_intersect_except?, #supports_intersect_except_all?, #supports_is_true?, #supports_join_using?, #supports_modifying_joins?, #supports_multiple_column_in?, #supports_timestamp_timezones?, #supports_timestamp_usecs?, #supports_window_functions?, #to_csv, #to_hash, #truncate, #truncate_sql, #unfiltered, #ungraphed, #ungrouped, #union, #unlimited, #unordered, #unused_table_alias, #update_sql, #where, #window_function_sql, #window_sql, #with, #with_recursive, #with_sql
Methods included from Sequel::Metaprogramming
Constructor Details
This class inherits a constructor from Sequel::Dataset
Instance Method Details
#call(type, bind_arguments = {}, *values, &block) ⇒ 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.
314 315 316 317 318 |
# File 'lib/sequel/adapters/mysql.rb', line 314 def call(type, bind_arguments={}, *values, &block) ps = to_prepared_statement(type, values) ps.extend(CallableStatementMethods) ps.call(bind_arguments, &block) end |
#delete ⇒ Object
Delete rows matching this dataset
321 322 323 |
# File 'lib/sequel/adapters/mysql.rb', line 321 def delete execute_dui(delete_sql){|c| return c.affected_rows} end |
#fetch_rows(sql, &block) ⇒ Object
Yield all rows matching this dataset. If the dataset is set to split multiple statements, yield arrays of hashes one per statement instead of yielding results for all statements as hashes.
328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 |
# File 'lib/sequel/adapters/mysql.rb', line 328 def fetch_rows(sql, &block) execute(sql) do |r| i = -1 cols = r.fetch_fields.map do |f| # Pretend tinyint is another integer type if its length is not 1, to # avoid casting to boolean if Sequel::MySQL.convert_tinyint_to_bool # is set. type_proc = f.type == 1 && f.length != 1 ? MYSQL_TYPES[2] : MYSQL_TYPES[f.type] [output_identifier(f.name), type_proc, i+=1] end @columns = cols.map{|c| c.first} if opts[:split_multiple_result_sets] s = [] yield_rows(r, cols){|h| s << h} yield s else yield_rows(r, cols, &block) end end self end |
#graph ⇒ Object
Don’t allow graphing a dataset that splits multiple statements
351 352 353 354 |
# File 'lib/sequel/adapters/mysql.rb', line 351 def graph(*) raise(Error, "Can't graph a dataset that splits multiple result sets") if opts[:split_multiple_result_sets] super end |
#insert(*values) ⇒ Object
Insert a new value into this dataset
357 358 359 |
# File 'lib/sequel/adapters/mysql.rb', line 357 def insert(*values) execute_dui(insert_sql(*values)){|c| return c.insert_id} end |
#prepare(type, name = nil, *values) ⇒ Object
Store the given type of prepared statement in the associated database with the given name.
363 364 365 366 367 368 369 370 371 |
# File 'lib/sequel/adapters/mysql.rb', line 363 def prepare(type, name=nil, *values) 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.
374 375 376 |
# File 'lib/sequel/adapters/mysql.rb', line 374 def replace(*args) execute_dui(replace_sql(*args)){|c| return c.insert_id} end |
#split_multiple_result_sets ⇒ Object
Makes each yield arrays of rows, with each array containing the rows for a given result set. Does not work with graphing. So you can submit SQL with multiple statements and easily determine which statement returned which results.
Modifies the row_proc of the returned dataset so that it still works as expected (running on the hashes instead of on the arrays of hashes). If you modify the row_proc afterward, note that it will receive an array of hashes instead of a hash.
387 388 389 390 391 392 |
# File 'lib/sequel/adapters/mysql.rb', line 387 def split_multiple_result_sets raise(Error, "Can't split multiple statements on a graphed dataset") if opts[:graph] ds = clone(:split_multiple_result_sets=>true) ds.row_proc = proc{|x| x.map{|h| row_proc.call(h)}} if row_proc ds end |
#update(values = {}) ⇒ Object
Update the matching rows.
395 396 397 |
# File 'lib/sequel/adapters/mysql.rb', line 395 def update(values={}) execute_dui(update_sql(values)){|c| return c.affected_rows} end |