Class: Sequel::TinyTDS::Database

Inherits:
Database show all
Includes:
MSSQL::DatabaseMethods
Defined in:
lib/sequel/adapters/tinytds.rb

Constant Summary collapse

DatasetClass =
self

Constants included from MSSQL::DatabaseMethods

MSSQL::DatabaseMethods::AUTO_INCREMENT, MSSQL::DatabaseMethods::DECIMAL_TYPE_RE, MSSQL::DatabaseMethods::FOREIGN_KEY_ACTION_MAP, MSSQL::DatabaseMethods::MSSQL_DEFAULT_RE, MSSQL::DatabaseMethods::SERVER_VERSION_RE, MSSQL::DatabaseMethods::SERVER_VERSION_SQL, MSSQL::DatabaseMethods::SQL_BEGIN, MSSQL::DatabaseMethods::SQL_COMMIT, MSSQL::DatabaseMethods::SQL_ROLLBACK, MSSQL::DatabaseMethods::SQL_ROLLBACK_TO_SAVEPOINT, MSSQL::DatabaseMethods::SQL_SAVEPOINT

Constants inherited from Database

Database::ADAPTERS, Database::AUTOINCREMENT, Database::COLUMN_DEFINITION_ORDER, Database::COLUMN_SCHEMA_DATETIME_TYPES, Database::COLUMN_SCHEMA_STRING_TYPES, Database::COMBINABLE_ALTER_TABLE_OPS, Database::COMMA_SEPARATOR, Database::CURRENT_TIMESTAMP_RE, Database::DEFAULT_DATABASE_ERROR_REGEXPS, Database::DEFAULT_JOIN_TABLE_COLUMN_OPTIONS, Database::DEFAULT_STRING_COLUMN_SIZE, Database::EXTENSIONS, Database::NOT_NULL, Database::NULL, Database::OPTS, Database::PRIMARY_KEY, Database::SCHEMA_TYPE_CLASSES, Database::SQL_BEGIN, Database::SQL_COMMIT, Database::SQL_RELEASE_SAVEPOINT, Database::SQL_ROLLBACK, Database::SQL_ROLLBACK_TO_SAVEPOINT, Database::SQL_SAVEPOINT, Database::STRING_DEFAULT_RE, Database::TEMPORARY, Database::TRANSACTION_BEGIN, Database::TRANSACTION_COMMIT, Database::TRANSACTION_ISOLATION_LEVELS, Database::TRANSACTION_ROLLBACK, Database::UNDERSCORE, Database::UNIQUE, Database::UNSIGNED

Instance Attribute Summary

Attributes included from MSSQL::DatabaseMethods

#mssql_unicode_strings

Attributes inherited from Database

#cache_schema, #dataset_class, #default_string_column_size, #identifier_input_method, #identifier_output_method, #log_connection_info, #log_warn_duration, #loggers, #opts, #pool, #prepared_statements, #sql_log_level, #timezone, #transaction_isolation_level

Instance Method Summary collapse

Methods included from MSSQL::DatabaseMethods

#call_mssql_sproc, #database_type, #foreign_key_list, #global_index_namespace?, #indexes, #server_version, #supports_partial_indexes?, #supports_savepoints?, #supports_transaction_isolation_levels?, #supports_transactional_ddl?, #tables, #views

Methods included from Database::ResetIdentifierMangling

#extended

Methods inherited from Database

#<<, #[], adapter_class, adapter_scheme, #adapter_scheme, #add_column, #add_index, #add_servers, #after_commit, after_initialize, #after_rollback, #alter_table, #alter_table_generator, #call, #cast_type_literal, connect, #create_join_table, #create_join_table!, #create_join_table?, #create_or_replace_view, #create_table, #create_table!, #create_table?, #create_table_generator, #create_view, #database_type, #dataset, #disconnect, #disconnect_connection, #drop_column, #drop_index, #drop_join_table, #drop_table, #drop_table?, #drop_view, #each_server, #extend_datasets, extension, #extension, #fetch, #from, #from_application_timestamp, #get, #global_index_namespace?, #in_transaction?, #initialize, #inspect, #literal, #literal_symbol, #literal_symbol_set, load_adapter, #log_connection_yield, #log_exception, #log_info, #log_yield, #logger=, #prepared_statement, #quote_identifier, #quote_identifiers=, #quote_identifiers?, register_extension, #remove_servers, #rename_column, #rename_table, #run, run_after_initialize, #schema, #schema_type_class, #select, #serial_primary_key_options, #servers, #set_column_default, #set_column_type, #set_prepared_statement, #sharded?, #single_threaded?, #supports_create_table_if_not_exists?, #supports_deferrable_constraints?, #supports_deferrable_foreign_key_constraints?, #supports_drop_table_if_exists?, #supports_foreign_key_parsing?, #supports_index_parsing?, #supports_partial_indexes?, #supports_prepared_transactions?, #supports_savepoints?, #supports_savepoints_in_prepared_transactions?, #supports_schema_parsing?, #supports_table_listing?, #supports_transaction_isolation_levels?, #supports_transactional_ddl?, #supports_view_listing?, #supports_views_with_check_option?, #supports_views_with_local_check_option?, #synchronize, #table_exists?, #test_connection, #to_application_timestamp, #transaction, #typecast_value, #uri, #url, #valid_connection?

Methods included from Metaprogramming

#meta_def

Constructor Details

This class inherits a constructor from Sequel::Database

Instance Method Details

#connect(server) ⇒ Object

Transfer the :user option to the :username option.



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/sequel/adapters/tinytds.rb', line 13

def connect(server)
  opts = server_opts(server)
  opts[:username] = opts[:user]
  c = TinyTds::Client.new(opts)
  c.query_options.merge!(:cache_rows=>false)

  if (ts = opts[:textsize])
    sql = "SET TEXTSIZE #{typecast_value_integer(ts)}"
    log_connection_yield(sql, c){c.execute(sql)}
  end

  c
end

#execute(sql, opts = OPTS) ⇒ Object

Execute the given sql on the server. If the :return option is present, its value should be a method symbol that is called on the TinyTds::Result object returned from executing the sql. The value of such a method is returned to the caller. Otherwise, if a block is given, it is yielded the result object. If no block is given and a :return is not present, nil is returned.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/sequel/adapters/tinytds.rb', line 33

def execute(sql, opts=OPTS)
  synchronize(opts[:server]) do |c|
    begin
      m = opts[:return]
      r = nil
      if (args = opts[:arguments]) && !args.empty?
        types = []
        values = []
        args.each_with_index do |(k, v), i|
          v, type = ps_arg_type(v)
          types << "@#{k} #{type}"
          values << "@#{k} = #{v}"
        end
        case m
        when :do
          sql = "#{sql}; SELECT @@ROWCOUNT AS AffectedRows"
          single_value = true
        when :insert
          sql = "#{sql}; SELECT CAST(SCOPE_IDENTITY() AS bigint) AS Ident"
          single_value = true
        end
        sql = "EXEC sp_executesql N'#{c.escape(sql)}', N'#{c.escape(types.join(', '))}', #{values.join(', ')}"
        log_connection_yield(sql, c) do
          r = c.execute(sql)
          r.each{|row| return row.values.first} if single_value
        end
      else
        log_connection_yield(sql, c) do
          r = c.execute(sql)
          return r.send(m) if m
        end
      end
      yield(r) if block_given?
    rescue TinyTds::Error => e
      raise_error(e, :disconnect=>!c.active?)
    ensure
      r.cancel if r && c.sqlsent? && c.active?
    end
  end
end

#execute_ddl(sql, opts = OPTS) ⇒ Object

Execute the DDL sql on the database and return nil.



90
91
92
93
94
95
# File 'lib/sequel/adapters/tinytds.rb', line 90

def execute_ddl(sql, opts=OPTS)
  opts = Hash[opts]
  opts[:return] = :each
  execute(sql, opts)
  nil
end

#execute_dui(sql, opts = OPTS) ⇒ Object

Return the number of rows modified by the given sql.



75
76
77
78
79
# File 'lib/sequel/adapters/tinytds.rb', line 75

def execute_dui(sql, opts=OPTS)
  opts = Hash[opts]
  opts[:return] = :do
  execute(sql, opts)
end

#execute_insert(sql, opts = OPTS) ⇒ Object

Return the value of the autogenerated primary key (if any) for the row inserted by the given sql.



83
84
85
86
87
# File 'lib/sequel/adapters/tinytds.rb', line 83

def execute_insert(sql, opts=OPTS)
  opts = Hash[opts]
  opts[:return] = :insert
  execute(sql, opts)
end