activerecord-sqlserver-adapter_new 4.2.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/CHANGELOG.md +212 -0
- data/CODE_OF_CONDUCT.md +31 -0
- data/Gemfile +61 -0
- data/Guardfile +29 -0
- data/MIT-LICENSE +20 -0
- data/README.md +201 -0
- data/RUNNING_UNIT_TESTS.md +121 -0
- data/Rakefile +48 -0
- data/VERSION +1 -0
- data/activerecord-sqlserver-adapter_new.gemspec +20 -0
- data/appveyor.yml +39 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/active_record.rb +27 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/attribute_methods.rb +25 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/explain.rb +40 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/explain_subscriber.rb +4 -0
- data/lib/active_record/connection_adapters/sqlserver/core_ext/odbc.rb +34 -0
- data/lib/active_record/connection_adapters/sqlserver/database_limits.rb +49 -0
- data/lib/active_record/connection_adapters/sqlserver/database_statements.rb +386 -0
- data/lib/active_record/connection_adapters/sqlserver/database_tasks.rb +68 -0
- data/lib/active_record/connection_adapters/sqlserver/errors.rb +7 -0
- data/lib/active_record/connection_adapters/sqlserver/quoting.rb +69 -0
- data/lib/active_record/connection_adapters/sqlserver/schema_cache.rb +114 -0
- data/lib/active_record/connection_adapters/sqlserver/schema_creation.rb +52 -0
- data/lib/active_record/connection_adapters/sqlserver/schema_statements.rb +473 -0
- data/lib/active_record/connection_adapters/sqlserver/showplan.rb +66 -0
- data/lib/active_record/connection_adapters/sqlserver/showplan/printer_table.rb +66 -0
- data/lib/active_record/connection_adapters/sqlserver/showplan/printer_xml.rb +22 -0
- data/lib/active_record/connection_adapters/sqlserver/table_definition.rb +76 -0
- data/lib/active_record/connection_adapters/sqlserver/transaction.rb +57 -0
- data/lib/active_record/connection_adapters/sqlserver/type.rb +46 -0
- data/lib/active_record/connection_adapters/sqlserver/type/big_integer.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/binary.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/boolean.rb +12 -0
- data/lib/active_record/connection_adapters/sqlserver/type/char.rb +38 -0
- data/lib/active_record/connection_adapters/sqlserver/type/date.rb +21 -0
- data/lib/active_record/connection_adapters/sqlserver/type/datetime.rb +41 -0
- data/lib/active_record/connection_adapters/sqlserver/type/datetime2.rb +17 -0
- data/lib/active_record/connection_adapters/sqlserver/type/datetimeoffset.rb +31 -0
- data/lib/active_record/connection_adapters/sqlserver/type/decimal.rb +12 -0
- data/lib/active_record/connection_adapters/sqlserver/type/float.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/integer.rb +12 -0
- data/lib/active_record/connection_adapters/sqlserver/type/money.rb +21 -0
- data/lib/active_record/connection_adapters/sqlserver/type/real.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/small_integer.rb +13 -0
- data/lib/active_record/connection_adapters/sqlserver/type/small_money.rb +21 -0
- data/lib/active_record/connection_adapters/sqlserver/type/smalldatetime.rb +22 -0
- data/lib/active_record/connection_adapters/sqlserver/type/string.rb +12 -0
- data/lib/active_record/connection_adapters/sqlserver/type/text.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/time.rb +40 -0
- data/lib/active_record/connection_adapters/sqlserver/type/time_value_fractional.rb +76 -0
- data/lib/active_record/connection_adapters/sqlserver/type/timestamp.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/tiny_integer.rb +22 -0
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_char.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_string.rb +12 -0
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_text.rb +15 -0
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar.rb +20 -0
- data/lib/active_record/connection_adapters/sqlserver/type/unicode_varchar_max.rb +20 -0
- data/lib/active_record/connection_adapters/sqlserver/type/uuid.rb +23 -0
- data/lib/active_record/connection_adapters/sqlserver/type/varbinary.rb +20 -0
- data/lib/active_record/connection_adapters/sqlserver/type/varbinary_max.rb +20 -0
- data/lib/active_record/connection_adapters/sqlserver/type/varchar.rb +20 -0
- data/lib/active_record/connection_adapters/sqlserver/type/varchar_max.rb +20 -0
- data/lib/active_record/connection_adapters/sqlserver/utils.rb +136 -0
- data/lib/active_record/connection_adapters/sqlserver/version.rb +11 -0
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +405 -0
- data/lib/active_record/connection_adapters/sqlserver_column.rb +53 -0
- data/lib/active_record/sqlserver_base.rb +20 -0
- data/lib/active_record/tasks/sqlserver_database_tasks.rb +131 -0
- data/lib/activerecord-sqlserver-adapter.rb +1 -0
- data/lib/arel/visitors/sqlserver.rb +214 -0
- data/lib/arel_sqlserver.rb +3 -0
- data/test/appveyor/dbsetup.ps1 +27 -0
- data/test/appveyor/dbsetup.sql +11 -0
- data/test/cases/adapter_test_sqlserver.rb +444 -0
- data/test/cases/coerced_tests.rb +713 -0
- data/test/cases/column_test_sqlserver.rb +780 -0
- data/test/cases/connection_test_sqlserver.rb +142 -0
- data/test/cases/execute_procedure_test_sqlserver.rb +44 -0
- data/test/cases/fetch_test_sqlserver.rb +57 -0
- data/test/cases/fully_qualified_identifier_test_sqlserver.rb +76 -0
- data/test/cases/helper_sqlserver.rb +54 -0
- data/test/cases/migration_test_sqlserver.rb +61 -0
- data/test/cases/order_test_sqlserver.rb +147 -0
- data/test/cases/pessimistic_locking_test_sqlserver.rb +90 -0
- data/test/cases/rake_test_sqlserver.rb +163 -0
- data/test/cases/schema_dumper_test_sqlserver.rb +198 -0
- data/test/cases/schema_test_sqlserver.rb +54 -0
- data/test/cases/scratchpad_test_sqlserver.rb +9 -0
- data/test/cases/showplan_test_sqlserver.rb +65 -0
- data/test/cases/specific_schema_test_sqlserver.rb +167 -0
- data/test/cases/transaction_test_sqlserver.rb +66 -0
- data/test/cases/utils_test_sqlserver.rb +129 -0
- data/test/cases/uuid_test_sqlserver.rb +48 -0
- data/test/config.yml +41 -0
- data/test/debug.rb +14 -0
- data/test/fixtures/1px.gif +0 -0
- data/test/migrations/transaction_table/1_table_will_never_be_created.rb +11 -0
- data/test/models/sqlserver/booking.rb +3 -0
- data/test/models/sqlserver/customers_view.rb +3 -0
- data/test/models/sqlserver/datatype.rb +3 -0
- data/test/models/sqlserver/datatype_migration.rb +3 -0
- data/test/models/sqlserver/dollar_table_name.rb +3 -0
- data/test/models/sqlserver/dot_table_name.rb +3 -0
- data/test/models/sqlserver/edge_schema.rb +13 -0
- data/test/models/sqlserver/fk_has_fk.rb +3 -0
- data/test/models/sqlserver/fk_has_pk.rb +3 -0
- data/test/models/sqlserver/natural_pk_data.rb +4 -0
- data/test/models/sqlserver/natural_pk_int_data.rb +3 -0
- data/test/models/sqlserver/no_pk_data.rb +3 -0
- data/test/models/sqlserver/object_default.rb +3 -0
- data/test/models/sqlserver/quoted_table.rb +7 -0
- data/test/models/sqlserver/quoted_view_1.rb +3 -0
- data/test/models/sqlserver/quoted_view_2.rb +3 -0
- data/test/models/sqlserver/string_default.rb +3 -0
- data/test/models/sqlserver/string_defaults_big_view.rb +3 -0
- data/test/models/sqlserver/string_defaults_view.rb +3 -0
- data/test/models/sqlserver/tinyint_pk.rb +3 -0
- data/test/models/sqlserver/upper.rb +3 -0
- data/test/models/sqlserver/uppered.rb +3 -0
- data/test/models/sqlserver/uuid.rb +3 -0
- data/test/schema/datatypes/2012.sql +55 -0
- data/test/schema/sqlserver_specific_schema.rb +207 -0
- data/test/support/coerceable_test_sqlserver.rb +45 -0
- data/test/support/connection_reflection.rb +37 -0
- data/test/support/load_schema_sqlserver.rb +29 -0
- data/test/support/minitest_sqlserver.rb +1 -0
- data/test/support/paths_sqlserver.rb +50 -0
- data/test/support/rake_helpers.rb +41 -0
- data/test/support/sql_counter_sqlserver.rb +32 -0
- metadata +253 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
require 'cases/helper_sqlserver'
|
|
3
|
+
|
|
4
|
+
class SQLServerUuidTest < ActiveRecord::TestCase
|
|
5
|
+
|
|
6
|
+
let(:acceptable_uuid) { ActiveRecord::ConnectionAdapters::SQLServer::Type::Uuid::ACCEPTABLE_UUID }
|
|
7
|
+
|
|
8
|
+
it 'has a uuid primary key' do
|
|
9
|
+
SSTestUuid.columns_hash['id'].type.must_equal :uuid
|
|
10
|
+
assert SSTestUuid.primary_key
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'can create with a new pk' do
|
|
14
|
+
# Type::Uuid::ACCEPTABLE_UUID
|
|
15
|
+
obj = SSTestUuid.create!
|
|
16
|
+
obj.id.must_be :present?
|
|
17
|
+
obj.id.must_match acceptable_uuid
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'can create other uuid column on reload' do
|
|
21
|
+
obj = SSTestUuid.create!
|
|
22
|
+
obj.reload
|
|
23
|
+
obj.other_uuid.must_match acceptable_uuid
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'can find uuid pk via connection' do
|
|
27
|
+
connection.primary_key(SSTestUuid.table_name).must_equal 'id'
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'changing column default' do
|
|
31
|
+
table_name = SSTestUuid.table_name
|
|
32
|
+
connection.add_column table_name, :thingy, :uuid, null: false, default: "NEWSEQUENTIALID()"
|
|
33
|
+
SSTestUuid.reset_column_information
|
|
34
|
+
column = SSTestUuid.columns_hash['thingy']
|
|
35
|
+
column.default_function.must_equal "newsequentialid()"
|
|
36
|
+
# Now to a different function.
|
|
37
|
+
connection.change_column table_name, :thingy, :uuid, null: false, default: "NEWID()"
|
|
38
|
+
SSTestUuid.reset_column_information
|
|
39
|
+
column = SSTestUuid.columns_hash['thingy']
|
|
40
|
+
column.default_function.must_equal "newid()"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'can insert even when use_output_inserted to false ' do
|
|
44
|
+
obj = with_use_output_inserted_disabled { SSTestUuid.create!(name: "😢") }
|
|
45
|
+
obj.id.must_be :nil?
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
data/test/config.yml
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
default_connection: dblib
|
|
2
|
+
|
|
3
|
+
default_connection_info: &default_connection_info
|
|
4
|
+
adapter: sqlserver
|
|
5
|
+
mode: <%= ENV['ARCONN'] || 'dblib' %>
|
|
6
|
+
host: <%= ENV['ACTIVERECORD_UNITTEST_HOST'] || 'localhost' %>
|
|
7
|
+
port: <%= ENV['ACTIVERECORD_UNITTEST_PORT'] %>
|
|
8
|
+
database: activerecord_unittest
|
|
9
|
+
username: <%= ENV['ACTIVERECORD_UNITTEST_USER'] || 'rails' %>
|
|
10
|
+
password: <%= ENV['ACTIVERECORD_UNITTEST_PASS'] || '' %>
|
|
11
|
+
collation: <%= ENV['ACTIVERECORD_UNITTEST_COLLATION'] || nil %>
|
|
12
|
+
encoding: utf8
|
|
13
|
+
|
|
14
|
+
connections:
|
|
15
|
+
|
|
16
|
+
dblib:
|
|
17
|
+
arunit:
|
|
18
|
+
<<: *default_connection_info
|
|
19
|
+
appname: SQLServerAdptrUnit
|
|
20
|
+
dataserver: <%= ENV['ACTIVERECORD_UNITTEST_DATASERVER'] %>
|
|
21
|
+
tds_version: <%= ENV['ACTIVERECORD_UNITTEST_TDSVERSION'] %>
|
|
22
|
+
azure: <%= !ENV['ACTIVERECORD_UNITTEST_AZURE'].nil? %>
|
|
23
|
+
timeout: <%= ENV['ACTIVERECORD_UNITTEST_AZURE'].present? ? 20 : nil %>
|
|
24
|
+
arunit2:
|
|
25
|
+
<<: *default_connection_info
|
|
26
|
+
database: activerecord_unittest2
|
|
27
|
+
appname: SQLServerAdptrUnit2
|
|
28
|
+
dataserver: <%= ENV['ACTIVERECORD_UNITTEST_DATASERVER'] %>
|
|
29
|
+
tds_version: <%= ENV['ACTIVERECORD_UNITTEST_TDSVERSION'] %>
|
|
30
|
+
azure: <%= !ENV['ACTIVERECORD_UNITTEST_AZURE'].nil? %>
|
|
31
|
+
timeout: <%= ENV['ACTIVERECORD_UNITTEST_AZURE'].present? ? 20 : nil %>
|
|
32
|
+
|
|
33
|
+
odbc:
|
|
34
|
+
arunit:
|
|
35
|
+
<<: *default_connection_info
|
|
36
|
+
dsn: <%= ENV['ACTIVERECORD_UNITTEST_DSN'] || 'activerecord_unittest' %>
|
|
37
|
+
arunit2:
|
|
38
|
+
<<: *default_connection_info
|
|
39
|
+
database: activerecord_unittest2
|
|
40
|
+
dsn: <%= ENV['ACTIVERECORD_UNITTEST2_DSN'] || 'activerecord_unittest2' %>
|
|
41
|
+
|
data/test/debug.rb
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# require 'rails/all'
|
|
2
|
+
require 'tiny_tds'
|
|
3
|
+
|
|
4
|
+
c = TinyTds::Client.new(
|
|
5
|
+
host: ENV['CI_AZURE_HOST'],
|
|
6
|
+
username: 'rails',
|
|
7
|
+
password: ENV['CI_AZURE_PASS'],
|
|
8
|
+
database: 'activerecord_unittest',
|
|
9
|
+
azure: true,
|
|
10
|
+
tds_version: '7.3'
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
puts c.execute("SELECT 1 AS [one]").each
|
|
14
|
+
c.close
|
|
Binary file
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
|
|
2
|
+
IF EXISTS (
|
|
3
|
+
SELECT TABLE_NAME
|
|
4
|
+
FROM INFORMATION_SCHEMA.TABLES
|
|
5
|
+
WHERE TABLE_NAME = N'sst_datatypes'
|
|
6
|
+
) DROP TABLE [sst_datatypes]
|
|
7
|
+
|
|
8
|
+
CREATE TABLE [sst_datatypes] (
|
|
9
|
+
-- Exact Numerics
|
|
10
|
+
[id] [int] NOT NULL IDENTITY(1,1) PRIMARY KEY,
|
|
11
|
+
[bigint] [bigint] NULL DEFAULT 42,
|
|
12
|
+
[int] [int] NULL DEFAULT 42,
|
|
13
|
+
[smallint] [smallint] NULL DEFAULT 42,
|
|
14
|
+
[tinyint] [tinyint] NULL DEFAULT 42,
|
|
15
|
+
[bit] [bit] NULL DEFAULT 1,
|
|
16
|
+
[decimal_9_2] [decimal](9, 2) NULL DEFAULT 12345.01,
|
|
17
|
+
[decimal_16_4] [decimal](16, 4) NULL DEFAULT 1234567.89,
|
|
18
|
+
[numeric_18_0] [numeric](18, 0) NULL DEFAULT 191,
|
|
19
|
+
[numeric_36_2] [numeric](36, 2) NULL DEFAULT 12345678901234567890.01,
|
|
20
|
+
[money] [money] NULL DEFAULT 4.20,
|
|
21
|
+
[smallmoney] [smallmoney] NULL DEFAULT 4.20,
|
|
22
|
+
-- Approximate Numerics
|
|
23
|
+
[float] [float] NULL DEFAULT 123.00000001,
|
|
24
|
+
[real] [real] NULL DEFAULT 123.45,
|
|
25
|
+
-- Date and Time
|
|
26
|
+
[date] [date] NULL DEFAULT '0001-01-01',
|
|
27
|
+
[datetime] [datetime] NULL DEFAULT '1753-01-01T00:00:00.123',
|
|
28
|
+
[datetime2_7] [datetime2](7) NULL DEFAULT '9999-12-31 23:59:59.9999999',
|
|
29
|
+
[datetime2_3] [datetime2](3) NULL,
|
|
30
|
+
[datetime2_1] [datetime2](1) NULL,
|
|
31
|
+
[datetime2_0] [datetime2](0) NULL,
|
|
32
|
+
[datetimeoffset_7] [datetimeoffset](7) NULL DEFAULT '1984-01-24 04:20:00.1234567 -08:00',
|
|
33
|
+
[datetimeoffset_3] [datetimeoffset](3) NULL,
|
|
34
|
+
[datetimeoffset_1] [datetimeoffset](1) NULL,
|
|
35
|
+
[smalldatetime] [smalldatetime] NULL DEFAULT '1901-01-01T15:45:00.000Z',
|
|
36
|
+
[time_7] [time](7) NULL DEFAULT '04:20:00.2883215',
|
|
37
|
+
[time_2] [time](2) NULL,
|
|
38
|
+
-- Character Strings
|
|
39
|
+
[char_10] [char](10) NULL DEFAULT '1234567890',
|
|
40
|
+
[varchar_50] [varchar](50) NULL DEFAULT 'test varchar_50',
|
|
41
|
+
[varchar_max] [varchar](max) NULL DEFAULT 'test varchar_max',
|
|
42
|
+
[text] [text] NULL DEFAULT 'test text',
|
|
43
|
+
-- Unicode Character Strings
|
|
44
|
+
[nchar_10] [nchar](10) NULL DEFAULT N'12345678åå',
|
|
45
|
+
[nvarchar_50] [nvarchar](50) NULL DEFAULT N'test nvarchar_50 åå',
|
|
46
|
+
[nvarchar_max] [nvarchar](max) NULL DEFAULT N'test nvarchar_max åå',
|
|
47
|
+
[ntext] [ntext] NULL DEFAULT N'test ntext åå',
|
|
48
|
+
-- Binary Strings
|
|
49
|
+
[binary_49] [binary](49) NULL,
|
|
50
|
+
[varbinary_49] [varbinary](49) NULL,
|
|
51
|
+
[varbinary_max] [varbinary](max) NULL,
|
|
52
|
+
-- Other Data Types
|
|
53
|
+
[uniqueidentifier] [uniqueidentifier] NULL DEFAULT NEWID(),
|
|
54
|
+
[timestamp] [timestamp] NULL,
|
|
55
|
+
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
ActiveRecord::Schema.define do
|
|
2
|
+
|
|
3
|
+
# Exhaustive Data Types
|
|
4
|
+
|
|
5
|
+
execute File.read(ARTest::SQLServer.schema_datatypes_2012_file)
|
|
6
|
+
|
|
7
|
+
create_table :sst_datatypes_migration, force: true do |t|
|
|
8
|
+
# Simple Rails conventions.
|
|
9
|
+
t.integer :integer_col
|
|
10
|
+
t.bigint :bigint_col
|
|
11
|
+
t.boolean :boolean_col
|
|
12
|
+
t.decimal :decimal_col
|
|
13
|
+
t.float :float_col
|
|
14
|
+
t.string :string_col
|
|
15
|
+
t.text :text_col
|
|
16
|
+
t.datetime :datetime_col
|
|
17
|
+
t.timestamp :timestamp_col
|
|
18
|
+
t.time :time_col
|
|
19
|
+
t.date :date_col
|
|
20
|
+
t.binary :binary_col
|
|
21
|
+
# Our type methods.
|
|
22
|
+
t.real :real_col
|
|
23
|
+
t.money :money_col
|
|
24
|
+
t.datetime2 :datetime2_col
|
|
25
|
+
t.datetimeoffset :datetimeoffset
|
|
26
|
+
t.smallmoney :smallmoney_col
|
|
27
|
+
t.char :char_col
|
|
28
|
+
t.varchar :varchar_col
|
|
29
|
+
t.text_basic :text_basic_col
|
|
30
|
+
t.nchar :nchar_col
|
|
31
|
+
t.ntext :ntext_col
|
|
32
|
+
t.binary_basic :binary_basic_col
|
|
33
|
+
t.varbinary :varbinary_col
|
|
34
|
+
t.uuid :uuid_col
|
|
35
|
+
t.ss_timestamp :sstimestamp_col
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Edge Cases
|
|
39
|
+
|
|
40
|
+
create_table 'sst_bookings', force: true do |t|
|
|
41
|
+
t.string :name
|
|
42
|
+
t.datetime2 :created_at, null: false
|
|
43
|
+
t.datetime2 :updated_at, null: false
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
create_table 'sst_uuids', force: true, id: :uuid do |t|
|
|
47
|
+
t.string :name
|
|
48
|
+
t.uuid :other_uuid, default: 'NEWID()'
|
|
49
|
+
t.uuid :uuid_nil_default, default: nil
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
create_table '[some.Name]', force: true do |t|
|
|
53
|
+
t.varchar :name
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
create_table 'sst_my$strange_table', force: true do |t|
|
|
57
|
+
t.string :name
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
create_table :SST_UPPER_TESTS, force: true do |t|
|
|
61
|
+
t.column :COLUMN1, :string
|
|
62
|
+
t.column :COLUMN2, :integer
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
create_table :sst_no_pk_data, force: true, id: false do |t|
|
|
66
|
+
t.string :name
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
create_table 'sst_quoted-table', force: true do |t|
|
|
70
|
+
end
|
|
71
|
+
execute "IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'sst_quoted-view1') DROP VIEW [sst_quoted-view1]"
|
|
72
|
+
execute "CREATE VIEW [sst_quoted-view1] AS SELECT * FROM [sst_quoted-table]"
|
|
73
|
+
execute "IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'sst_quoted-view2') DROP VIEW [sst_quoted-view2]"
|
|
74
|
+
execute "CREATE VIEW [sst_quoted-view2] AS \n /*#{'x'*4000}}*/ \n SELECT * FROM [sst_quoted-table]"
|
|
75
|
+
|
|
76
|
+
create_table :sst_string_defaults, force: true do |t|
|
|
77
|
+
t.column :string_with_null_default, :string, default: nil
|
|
78
|
+
t.column :string_with_pretend_null_one, :string, default: 'null'
|
|
79
|
+
t.column :string_with_pretend_null_two, :string, default: '(null)'
|
|
80
|
+
t.column :string_with_pretend_null_three, :string, default: 'NULL'
|
|
81
|
+
t.column :string_with_pretend_null_four, :string, default: '(NULL)'
|
|
82
|
+
t.column :string_with_pretend_paren_three, :string, default: '(3)'
|
|
83
|
+
t.column :string_with_multiline_default, :string, default: "Some long default with a\nnew line."
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
create_table :sst_edge_schemas, force: true do |t|
|
|
87
|
+
t.string :description
|
|
88
|
+
t.column 'crazy]]quote', :string
|
|
89
|
+
t.column 'with spaces', :string
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_natural_pk_data') DROP TABLE sst_natural_pk_data"
|
|
93
|
+
execute <<-NATURALPKTABLESQL
|
|
94
|
+
CREATE TABLE sst_natural_pk_data(
|
|
95
|
+
parent_id int,
|
|
96
|
+
name nvarchar(255),
|
|
97
|
+
description nvarchar(1000),
|
|
98
|
+
legacy_id nvarchar(10) NOT NULL PRIMARY KEY
|
|
99
|
+
)
|
|
100
|
+
NATURALPKTABLESQL
|
|
101
|
+
|
|
102
|
+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_natural_pk_int_data') DROP TABLE sst_natural_pk_int_data"
|
|
103
|
+
execute <<-NATURALPKINTTABLESQL
|
|
104
|
+
CREATE TABLE sst_natural_pk_int_data(
|
|
105
|
+
legacy_id int NOT NULL PRIMARY KEY,
|
|
106
|
+
parent_id int,
|
|
107
|
+
name nvarchar(255),
|
|
108
|
+
description nvarchar(1000)
|
|
109
|
+
)
|
|
110
|
+
NATURALPKINTTABLESQL
|
|
111
|
+
|
|
112
|
+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_tinyint_pk') DROP TABLE sst_tinyint_pk"
|
|
113
|
+
execute <<-TINYITPKTABLE
|
|
114
|
+
CREATE TABLE sst_tinyint_pk(
|
|
115
|
+
id tinyint IDENTITY NOT NULL PRIMARY KEY,
|
|
116
|
+
name nvarchar(255)
|
|
117
|
+
)
|
|
118
|
+
TINYITPKTABLE
|
|
119
|
+
|
|
120
|
+
execute "DROP DEFAULT [sst_getdateobject];" rescue nil
|
|
121
|
+
execute "CREATE DEFAULT [sst_getdateobject] AS getdate();" rescue nil
|
|
122
|
+
create_table 'sst_defaultobjects', force: true do |t|
|
|
123
|
+
t.string :name
|
|
124
|
+
t.date :date
|
|
125
|
+
end
|
|
126
|
+
execute "sp_bindefault 'sst_getdateobject', 'sst_defaultobjects.date'"
|
|
127
|
+
|
|
128
|
+
execute "DROP PROCEDURE my_getutcdate" rescue nil
|
|
129
|
+
execute <<-SQL
|
|
130
|
+
CREATE PROCEDURE my_getutcdate AS
|
|
131
|
+
SELECT GETUTCDATE() utcdate
|
|
132
|
+
SQL
|
|
133
|
+
|
|
134
|
+
# Constraints
|
|
135
|
+
|
|
136
|
+
create_table(:sst_has_fks, force: true) { |t| t.column(:fk_id, :integer, null: false) }
|
|
137
|
+
create_table(:sst_has_pks, force: true) { }
|
|
138
|
+
execute <<-ADDFKSQL
|
|
139
|
+
ALTER TABLE sst_has_fks
|
|
140
|
+
ADD CONSTRAINT FK__sst_has_fks_id
|
|
141
|
+
FOREIGN KEY ([fk_id])
|
|
142
|
+
REFERENCES [sst_has_pks] ([id])
|
|
143
|
+
ADDFKSQL
|
|
144
|
+
|
|
145
|
+
# Views
|
|
146
|
+
|
|
147
|
+
execute "IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'sst_customers_view') DROP VIEW sst_customers_view"
|
|
148
|
+
execute <<-CUSTOMERSVIEW
|
|
149
|
+
CREATE VIEW sst_customers_view AS
|
|
150
|
+
SELECT id, name, balance
|
|
151
|
+
FROM customers
|
|
152
|
+
CUSTOMERSVIEW
|
|
153
|
+
|
|
154
|
+
execute "IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'sst_string_defaults_view') DROP VIEW sst_string_defaults_view"
|
|
155
|
+
execute <<-STRINGDEFAULTSVIEW
|
|
156
|
+
CREATE VIEW sst_string_defaults_view AS
|
|
157
|
+
SELECT id, string_with_pretend_null_one as pretend_null
|
|
158
|
+
FROM sst_string_defaults
|
|
159
|
+
STRINGDEFAULTSVIEW
|
|
160
|
+
|
|
161
|
+
execute "IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'sst_string_defaults_big_view') DROP VIEW sst_string_defaults_big_view"
|
|
162
|
+
execute <<-STRINGDEFAULTSBIGVIEW
|
|
163
|
+
CREATE VIEW sst_string_defaults_big_view AS
|
|
164
|
+
SELECT id, string_with_pretend_null_one as pretend_null
|
|
165
|
+
/*#{'x'*4000}}*/
|
|
166
|
+
FROM sst_string_defaults
|
|
167
|
+
STRINGDEFAULTSBIGVIEW
|
|
168
|
+
|
|
169
|
+
# Another schema.
|
|
170
|
+
|
|
171
|
+
create_table :sst_schema_columns, force: true do |t|
|
|
172
|
+
t.column :field1 , :integer
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
execute "IF NOT EXISTS(SELECT * FROM sys.schemas WHERE name = 'test') EXEC sp_executesql N'CREATE SCHEMA test'"
|
|
176
|
+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_schema_columns' and TABLE_SCHEMA = 'test') DROP TABLE test.sst_schema_columns"
|
|
177
|
+
execute <<-SIMILIARTABLEINOTHERSCHEMA
|
|
178
|
+
CREATE TABLE test.sst_schema_columns(
|
|
179
|
+
id int IDENTITY NOT NULL primary key,
|
|
180
|
+
filed_1 int,
|
|
181
|
+
field_2 int,
|
|
182
|
+
name varchar(255),
|
|
183
|
+
description varchar(1000),
|
|
184
|
+
n_name nvarchar(255),
|
|
185
|
+
n_description nvarchar(1000)
|
|
186
|
+
)
|
|
187
|
+
SIMILIARTABLEINOTHERSCHEMA
|
|
188
|
+
|
|
189
|
+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_schema_identity' and TABLE_SCHEMA = 'test') DROP TABLE test.sst_schema_identity"
|
|
190
|
+
execute <<-SIMILIARTABLEINOTHERSCHEMA
|
|
191
|
+
CREATE TABLE test.sst_schema_identity(
|
|
192
|
+
id int IDENTITY NOT NULL primary key,
|
|
193
|
+
filed_1 int
|
|
194
|
+
)
|
|
195
|
+
SIMILIARTABLEINOTHERSCHEMA
|
|
196
|
+
|
|
197
|
+
execute "IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sst_schema_natural_id' and TABLE_SCHEMA = 'test') DROP TABLE test.sst_schema_natural_id"
|
|
198
|
+
execute <<-NATURALPKTABLESQLINOTHERSCHEMA
|
|
199
|
+
CREATE TABLE test.sst_schema_natural_id(
|
|
200
|
+
parent_id int,
|
|
201
|
+
name nvarchar(255),
|
|
202
|
+
description nvarchar(1000),
|
|
203
|
+
legacy_id nvarchar(10) NOT NULL PRIMARY KEY,
|
|
204
|
+
)
|
|
205
|
+
NATURALPKTABLESQLINOTHERSCHEMA
|
|
206
|
+
|
|
207
|
+
end
|