Module: Sequel::MSSQL::DatabaseMethods

Included in:
ADO::MSSQL::DatabaseMethods, JDBC::MSSQL::DatabaseMethods, ODBC::MSSQL::DatabaseMethods, TinyTDS::Database
Defined in:
lib/sequel/adapters/shared/mssql.rb

Constant Summary collapse

AUTO_INCREMENT =
'IDENTITY(1,1)'.freeze
SERVER_VERSION_RE =
/^(\d+)\.(\d+)\.(\d+)/.freeze
SERVER_VERSION_SQL =
"SELECT CAST(SERVERPROPERTY('ProductVersion') AS varchar)".freeze
SQL_BEGIN =
"BEGIN TRANSACTION".freeze
SQL_COMMIT =
"COMMIT TRANSACTION".freeze
SQL_ROLLBACK =
"IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION".freeze
SQL_ROLLBACK_TO_SAVEPOINT =
'IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION autopoint_%d'.freeze
SQL_SAVEPOINT =
'SAVE TRANSACTION autopoint_%d'.freeze
DECIMAL_TYPE_RE =

The types to check for 0 scale to transform :decimal types to :integer.

/number|numeric|decimal/io

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#mssql_unicode_stringsObject

Whether to use N” to quote strings, which allows unicode characters inside the strings. True by default for compatibility, can be set to false for a possible performance increase. This sets the default for all datasets created from this Database object.



20
21
22
# File 'lib/sequel/adapters/shared/mssql.rb', line 20

def mssql_unicode_strings
  @mssql_unicode_strings
end

Instance Method Details

#database_typeObject

Microsoft SQL Server uses the :mssql type.



27
28
29
# File 'lib/sequel/adapters/shared/mssql.rb', line 27

def database_type
  :mssql
end

#indexes(table, opts = {}) ⇒ Object

Use the system tables to get index information



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/sequel/adapters/shared/mssql.rb', line 32

def indexes(table, opts={})
  m = output_identifier_meth
  im = input_identifier_meth
  indexes = {}
  .from(:sys__tables___t).
   join(:sys__indexes___i, :object_id=>:object_id).
   join(:sys__index_columns___ic, :object_id=>:object_id, :index_id=>:index_id).
   join(:sys__columns___c, :object_id=>:object_id, :column_id=>:column_id).
   select(:i__name, :i__is_unique, :c__name___column).
   where{{t__name=>im.call(table)}}.
   where(:i__is_primary_key=>0, :i__is_disabled=>0).
   order(:i__name, :ic__index_column_id).
   each do |r|
    index = indexes[m.call(r[:name])] ||= {:columns=>[], :unique=>(r[:is_unique] && r[:is_unique]!=0)}
    index[:columns] << m.call(r[:column])
  end
  indexes
end

#server_version(server = nil) ⇒ Object

The version of the MSSQL server, as an integer (e.g. 10001600 for SQL Server 2008 Express).



53
54
55
56
57
58
59
60
61
62
63
# File 'lib/sequel/adapters/shared/mssql.rb', line 53

def server_version(server=nil)
  return @server_version if @server_version
  @server_version = synchronize(server) do |conn|
    (conn.server_version rescue nil) if conn.respond_to?(:server_version)
  end
  unless @server_version
    m = SERVER_VERSION_RE.match(fetch(SERVER_VERSION_SQL).single_value.to_s)
    @server_version = (m[1].to_i * 1000000) + (m[2].to_i * 10000) + m[3].to_i
  end
  @server_version
end

#supports_savepoints?Boolean

MSSQL supports savepoints, though it doesn’t support committing/releasing them savepoint

Returns:

  • (Boolean)


66
67
68
# File 'lib/sequel/adapters/shared/mssql.rb', line 66

def supports_savepoints?
  true
end

#supports_transaction_isolation_levels?Boolean

MSSQL supports transaction isolation levels

Returns:

  • (Boolean)


71
72
73
# File 'lib/sequel/adapters/shared/mssql.rb', line 71

def supports_transaction_isolation_levels?
  true
end

#supports_transactional_ddl?Boolean

MSSQL supports transaction DDL statements.

Returns:

  • (Boolean)


76
77
78
# File 'lib/sequel/adapters/shared/mssql.rb', line 76

def supports_transactional_ddl?
  true
end

#tables(opts = {}) ⇒ Object

Microsoft SQL Server supports using the INFORMATION_SCHEMA to get information on tables.



82
83
84
# File 'lib/sequel/adapters/shared/mssql.rb', line 82

def tables(opts={})
  information_schema_tables('BASE TABLE', opts)
end

#views(opts = {}) ⇒ Object

Microsoft SQL Server supports using the INFORMATION_SCHEMA to get information on views.



88
89
90
# File 'lib/sequel/adapters/shared/mssql.rb', line 88

def views(opts={})
  information_schema_tables('VIEW', opts)
end