Module | Sequel::MSSQL::DatabaseMethods |
In: |
lib/sequel/adapters/shared/mssql.rb
|
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 | ||
MSSQL_DEFAULT_RE | = | /\A(?:\(N?('.*')\)|\(\((-?\d+(?:\.\d+)?)\)\))\z/ | ||
FOREIGN_KEY_ACTION_MAP | = | {0 => :no_action, 1 => :cascade, 2 => :set_null, 3 => :set_default}.freeze | ||
DECIMAL_TYPE_RE | = | /number|numeric|decimal/io | The types to check for 0 scale to transform :decimal types to :integer. | |
DATABASE_ERROR_REGEXPS | = | { /Violation of UNIQUE KEY constraint/ => UniqueConstraintViolation, /conflicted with the (FOREIGN KEY.*|REFERENCE) constraint/ => ForeignKeyConstraintViolation, /conflicted with the CHECK constraint/ => CheckConstraintViolation, /column does not allow nulls/ => NotNullConstraintViolation, /was deadlocked on lock resources with another process and has been chosen as the deadlock victim/ => SerializationFailure, }.freeze |
mssql_unicode_strings | [R] | 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. |
Return foreign key information using the system views, including :name, :on_delete, and :on_update entries in the hashes.
# File lib/sequel/adapters/shared/mssql.rb, line 49 49: def foreign_key_list(table, opts=OPTS) 50: m = output_identifier_meth 51: im = input_identifier_meth 52: schema, table = schema_and_table(table) 53: current_schema = m.call(get(Sequel.function('schema_name'))) 54: fk_action_map = FOREIGN_KEY_ACTION_MAP 55: ds = metadata_dataset.from(:sys__foreign_keys___fk). 56: join(:sys__foreign_key_columns___fkc, :constraint_object_id => :object_id). 57: join(:sys__all_columns___pc, :object_id => :fkc__parent_object_id, :column_id => :fkc__parent_column_id). 58: join(:sys__all_columns___rc, :object_id => :fkc__referenced_object_id, :column_id => :fkc__referenced_column_id). 59: where{{object_schema_name(:fk__parent_object_id) => im.call(schema || current_schema)}}. 60: where{{object_name(:fk__parent_object_id) => im.call(table)}}. 61: select{[:fk__name, 62: :fk__delete_referential_action, 63: :fk__update_referential_action, 64: :pc__name___column, 65: :rc__name___referenced_column, 66: object_schema_name(:fk__referenced_object_id).as(:schema), 67: object_name(:fk__referenced_object_id).as(:table)]}. 68: order(:name, :fkc__constraint_column_id) 69: h = {} 70: ds.each do |row| 71: if r = h[row[:name]] 72: r[:columns] << m.call(row[:column]) 73: r[:key] << m.call(row[:referenced_column]) 74: else 75: referenced_schema = m.call(row[:schema]) 76: referenced_table = m.call(row[:table]) 77: h[row[:name]] = { :name => m.call(row[:name]), 78: :table => (referenced_schema == current_schema) ? referenced_table : "#{referenced_schema}__#{referenced_table}""#{referenced_schema}__#{referenced_table}", 79: :columns => [m.call(row[:column])], 80: :key => [m.call(row[:referenced_column])], 81: :on_update => fk_action_map[row[:update_referential_action]], 82: :on_delete => fk_action_map[row[:delete_referential_action]] } 83: end 84: end 85: h.values 86: end
Use the system tables to get index information
# File lib/sequel/adapters/shared/mssql.rb, line 89 89: def indexes(table, opts=OPTS) 90: m = output_identifier_meth 91: im = input_identifier_meth 92: indexes = {} 93: metadata_dataset.from(:sys__tables___t). 94: join(:sys__indexes___i, :object_id=>:object_id). 95: join(:sys__index_columns___ic, :object_id=>:object_id, :index_id=>:index_id). 96: join(:sys__columns___c, :object_id=>:object_id, :column_id=>:column_id). 97: select(:i__name, :i__is_unique, :c__name___column). 98: where{{t__name=>im.call(table)}}. 99: where(:i__is_primary_key=>0, :i__is_disabled=>0). 100: order(:i__name, :ic__index_column_id). 101: each do |r| 102: index = indexes[m.call(r[:name])] ||= {:columns=>[], :unique=>(r[:is_unique] && r[:is_unique]!=0)} 103: index[:columns] << m.call(r[:column]) 104: end 105: indexes 106: end
# File lib/sequel/adapters/shared/mssql.rb, line 28 28: def mssql_unicode_strings=(v) 29: @mssql_unicode_strings = v 30: reset_default_dataset 31: end
The version of the MSSQL server, as an integer (e.g. 10001600 for SQL Server 2008 Express).
# File lib/sequel/adapters/shared/mssql.rb, line 110 110: def server_version(server=nil) 111: return @server_version if @server_version 112: @server_version = synchronize(server) do |conn| 113: (conn.server_version rescue nil) if conn.respond_to?(:server_version) 114: end 115: unless @server_version 116: m = SERVER_VERSION_RE.match(fetch(SERVER_VERSION_SQL).single_value.to_s) 117: @server_version = (m[1].to_i * 1000000) + (m[2].to_i * 10000) + m[3].to_i 118: end 119: @server_version 120: end