activerecord-cockroachdb-adapter 8.0.2 → 8.1.0

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.
Files changed (239) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/CONTRIBUTING.md +10 -17
  4. data/Gemfile +2 -1
  5. data/Rakefile +0 -19
  6. data/lib/active_record/connection_adapters/cockroachdb/column.rb +66 -24
  7. data/lib/active_record/connection_adapters/cockroachdb/database_statements.rb +13 -3
  8. data/lib/active_record/connection_adapters/cockroachdb/database_tasks.rb +1 -1
  9. data/lib/active_record/connection_adapters/cockroachdb/oid/spatial.rb +34 -19
  10. data/lib/active_record/connection_adapters/cockroachdb/quoting.rb +19 -3
  11. data/lib/active_record/connection_adapters/cockroachdb/referential_integrity.rb +87 -55
  12. data/lib/active_record/connection_adapters/cockroachdb/schema_statements.rb +181 -102
  13. data/lib/active_record/connection_adapters/cockroachdb_adapter.rb +42 -25
  14. data/lib/version.rb +1 -1
  15. data/test/cases/adapter_test.rb +98 -0
  16. data/test/cases/adapters/cockroachdb/referential_integrity_test.rb +51 -0
  17. data/test/cases/adapters/postgresql/active_schema_test.rb +71 -0
  18. data/test/cases/adapters/postgresql/change_schema_test.rb +75 -0
  19. data/test/cases/adapters/postgresql/connection_test.rb +46 -0
  20. data/test/cases/adapters/postgresql/ddl_test.rb +326 -0
  21. data/test/cases/adapters/postgresql/interval_test.rb +131 -0
  22. data/test/cases/adapters/postgresql/nested_class_test.rb +22 -0
  23. data/test/cases/adapters/postgresql/numeric_test.rb +28 -0
  24. data/test/cases/adapters/postgresql/postgis_test.rb +185 -0
  25. data/test/cases/adapters/postgresql/postgresql_adapter_test.rb +115 -0
  26. data/test/cases/adapters/postgresql/quoting_test.rb +30 -0
  27. data/test/cases/adapters/postgresql/schema_statements_test.rb +29 -0
  28. data/test/cases/adapters/postgresql/serial_test.rb +199 -0
  29. data/test/cases/adapters/postgresql/spatial_queries_test.rb +118 -0
  30. data/test/cases/adapters/postgresql/spatial_setup_test.rb +18 -0
  31. data/test/cases/adapters/postgresql/spatial_type_test.rb +41 -0
  32. data/test/cases/adapters/postgresql/timestamp_test.rb +58 -0
  33. data/test/cases/adapters/postgresql/virtual_column_test.rb +39 -0
  34. data/test/cases/associations/eager_load_nested_include_test.rb +111 -0
  35. data/test/cases/associations/left_outer_join_association_test.rb +30 -0
  36. data/test/cases/associations_test.rb +108 -0
  37. data/test/cases/base_test.rb +31 -0
  38. data/test/cases/comment_test.rb +75 -0
  39. data/test/cases/connection_adapters/type_test.rb +28 -0
  40. data/test/cases/database_configurations/resolver_test.rb +24 -0
  41. data/test/cases/defaults_test.rb +45 -0
  42. data/test/cases/dirty_test.rb +24 -0
  43. data/test/cases/fixtures_test.rb +541 -0
  44. data/test/cases/helper_cockroachdb.rb +232 -0
  45. data/test/cases/inheritance_test.rb +42 -0
  46. data/test/cases/invertible_migration_test.rb +73 -0
  47. data/test/cases/marshal_serialization_test.rb +45 -0
  48. data/test/cases/migration/change_schema_test.rb +140 -0
  49. data/test/cases/migration/check_constraint_test.rb +125 -0
  50. data/test/cases/migration/columns_test.rb +50 -0
  51. data/test/cases/migration/create_join_table_test.rb +66 -0
  52. data/test/cases/migration/foreign_key_test.rb +390 -0
  53. data/test/cases/migration/hidden_column_test.rb +70 -0
  54. data/test/cases/migration/references_foreign_key_test.rb +124 -0
  55. data/test/cases/migration_test.rb +120 -0
  56. data/test/cases/persistence_test.rb +33 -0
  57. data/test/cases/primary_keys_test.rb +134 -0
  58. data/test/cases/relation/aost_test.rb +57 -0
  59. data/test/cases/relation/or_test.rb +26 -0
  60. data/test/cases/relation/table_hints_test.rb +124 -0
  61. data/test/cases/relation_test.rb +26 -0
  62. data/test/cases/relations_test.rb +29 -0
  63. data/test/cases/schema_dumper_test.rb +221 -0
  64. data/test/cases/show_create_test.rb +14 -0
  65. data/test/cases/strict_loading_test.rb +34 -0
  66. data/test/cases/tasks/cockroachdb_rake_test.rb +113 -0
  67. data/test/cases/test_fixtures_test.rb +57 -0
  68. data/test/cases/transactions_test.rb +51 -0
  69. data/test/cases/unsafe_raw_sql_test.rb +22 -0
  70. data/test/config.yml +23 -0
  71. data/test/excludes/ActiveRecord/AdapterTest.rb +3 -0
  72. data/test/excludes/ActiveRecord/AdapterTestWithoutTransaction.rb +25 -0
  73. data/test/excludes/ActiveRecord/ConnectionAdapters/PoolConfig/ResolverTest.rb +1 -0
  74. data/test/excludes/ActiveRecord/ConnectionAdapters/PostgreSQLAdapter/BindParameterTest.rb +15 -0
  75. data/test/excludes/ActiveRecord/ConnectionAdapters/PostgreSQLAdapter/QuotingTest.rb +22 -0
  76. data/test/excludes/ActiveRecord/ConnectionAdapters/PostgreSQLAdapterPreventWritesLegacyTest.rb +1 -0
  77. data/test/excludes/ActiveRecord/ConnectionAdapters/PostgreSQLAdapterPreventWritesTest.rb +1 -0
  78. data/test/excludes/ActiveRecord/ConnectionAdapters/PostgreSQLAdapterTest.rb +40 -0
  79. data/test/excludes/ActiveRecord/ConnectionAdapters/RegistrationIsolatedTest.rb +14 -0
  80. data/test/excludes/ActiveRecord/Encryption/EncryptionPerformanceTest.rb +1 -0
  81. data/test/excludes/ActiveRecord/Encryption/EnvelopeEncryptionPerformanceTest.rb +1 -0
  82. data/test/excludes/ActiveRecord/Encryption/ExtendedDeterministicQueriesPerformanceTest.rb +1 -0
  83. data/test/excludes/ActiveRecord/Encryption/StoragePerformanceTest.rb +2 -0
  84. data/test/excludes/ActiveRecord/InstrumentationTest.rb +16 -0
  85. data/test/excludes/ActiveRecord/InvertibleMigrationTest.rb +2 -0
  86. data/test/excludes/ActiveRecord/Migration/ChangeSchemaTest.rb +7 -0
  87. data/test/excludes/ActiveRecord/Migration/CheckConstraintTest.rb +6 -0
  88. data/test/excludes/ActiveRecord/Migration/ColumnsTest.rb +4 -0
  89. data/test/excludes/ActiveRecord/Migration/CompatibilityTest.rb +50 -0
  90. data/test/excludes/ActiveRecord/Migration/CompositeForeignKeyTest.rb +2 -0
  91. data/test/excludes/ActiveRecord/Migration/CreateJoinTableTest.rb +2 -0
  92. data/test/excludes/ActiveRecord/Migration/ForeignKeyInCreateTest.rb +1 -0
  93. data/test/excludes/ActiveRecord/Migration/ForeignKeyTest.rb +35 -0
  94. data/test/excludes/ActiveRecord/Migration/InvalidOptionsTest.rb +14 -0
  95. data/test/excludes/ActiveRecord/Migration/PGChangeSchemaTest.rb +8 -0
  96. data/test/excludes/ActiveRecord/Migration/ReferencesForeignKeyTest.rb +7 -0
  97. data/test/excludes/ActiveRecord/Migration/ReferencesIndexTest.rb +7 -0
  98. data/test/excludes/ActiveRecord/Migration/ReferencesStatementsTest.rb +3 -0
  99. data/test/excludes/ActiveRecord/MysqlDBCreateWithInvalidPermissionsTest.rb +1 -0
  100. data/test/excludes/ActiveRecord/OrTest.rb +1 -0
  101. data/test/excludes/ActiveRecord/PostgreSQLStructureDumpTest.rb +10 -0
  102. data/test/excludes/ActiveRecord/PostgresqlConnectionTest.rb +12 -0
  103. data/test/excludes/ActiveRecord/PostgresqlTransactionNestedTest.rb +14 -0
  104. data/test/excludes/ActiveRecord/PostgresqlTransactionTest.rb +4 -0
  105. data/test/excludes/ActiveRecord/RelationTest.rb +2 -0
  106. data/test/excludes/ActiveRecord/TooManyOrTest.rb +1 -0
  107. data/test/excludes/ActiveSupportSubclassWithFixturesTest.rb +1 -0
  108. data/test/excludes/AssociationDeprecationTest/NotifyModeTest.rb +2 -0
  109. data/test/excludes/AssociationDeprecationTest/RaiseBacktraceModeTest.rb +2 -0
  110. data/test/excludes/AssociationDeprecationTest/RaiseModeTest.rb +2 -0
  111. data/test/excludes/AssociationDeprecationTest/WarnBacktraceModeTest.rb +2 -0
  112. data/test/excludes/AssociationDeprecationTest/WarnModeTest.rb +2 -0
  113. data/test/excludes/AssociationDeprecationTest/fix_backtrace_cleaner.rb +10 -0
  114. data/test/excludes/BasicsTest.rb +1 -0
  115. data/test/excludes/BulkAlterTableMigrationsTest.rb +7 -0
  116. data/test/excludes/CalculationsTest.rb +4 -0
  117. data/test/excludes/CommentTest.rb +2 -0
  118. data/test/excludes/CoreTest.rb +1 -0
  119. data/test/excludes/CreateOrFindByWithinTransactions.rb +3 -0
  120. data/test/excludes/DefaultsUsingMultipleSchemasAndDomainTest.rb +7 -0
  121. data/test/excludes/DirtyTest.rb +3 -0
  122. data/test/excludes/EachTest.rb +8 -0
  123. data/test/excludes/EagerLoadPolyAssocsTest.rb +1 -0
  124. data/test/excludes/ExplicitlyNamedIndexMigrationTest.rb +1 -0
  125. data/test/excludes/FixturesResetPkSequenceTest.rb +3 -0
  126. data/test/excludes/FixturesTest.rb +21 -0
  127. data/test/excludes/FixturesWithForeignKeyViolationsTest.rb +2 -0
  128. data/test/excludes/ForeignTableTest.rb +10 -0
  129. data/test/excludes/InheritanceComputeTypeTest.rb +1 -0
  130. data/test/excludes/LeftOuterJoinAssociationTest.rb +2 -0
  131. data/test/excludes/LegacyPrimaryKeyTest/V4_2.rb +6 -0
  132. data/test/excludes/LegacyPrimaryKeyTest/V5_0.rb +6 -0
  133. data/test/excludes/MarshalSerializationTest.rb +4 -0
  134. data/test/excludes/MaterializedViewTest.rb +13 -0
  135. data/test/excludes/MigrationTest.rb +2 -0
  136. data/test/excludes/MultiDbMigratorTest.rb +2 -0
  137. data/test/excludes/NestedRelationScopingTest.rb +1 -0
  138. data/test/excludes/OrTest.rb +1 -0
  139. data/test/excludes/PersistenceTest.rb +3 -0
  140. data/test/excludes/PessimisticLockingTest.rb +1 -0
  141. data/test/excludes/PostgreSQLExplainTest.rb +7 -0
  142. data/test/excludes/PostgreSQLGeometricLineTest.rb +3 -0
  143. data/test/excludes/PostgreSQLGeometricTypesTest.rb +7 -0
  144. data/test/excludes/PostgreSQLPartitionsTest.rb +1 -0
  145. data/test/excludes/PostgreSQLReferentialIntegrityTest.rb +14 -0
  146. data/test/excludes/PostgresqlArrayTest.rb +21 -0
  147. data/test/excludes/PostgresqlBigSerialTest.rb +7 -0
  148. data/test/excludes/PostgresqlBitStringTest.rb +2 -0
  149. data/test/excludes/PostgresqlByteaTest.rb +1 -0
  150. data/test/excludes/PostgresqlCitextTest.rb +7 -0
  151. data/test/excludes/PostgresqlCollationTest.rb +5 -0
  152. data/test/excludes/PostgresqlCompositeTest.rb +2 -0
  153. data/test/excludes/PostgresqlCompositeWithCustomOIDTest.rb +2 -0
  154. data/test/excludes/PostgresqlDataTypeTest.rb +9 -0
  155. data/test/excludes/PostgresqlDefaultExpressionTest.rb +1 -0
  156. data/test/excludes/PostgresqlDeferredConstraintsTest.rb +3 -0
  157. data/test/excludes/PostgresqlDomainTest.rb +2 -0
  158. data/test/excludes/PostgresqlExtensionMigrationTest.rb +5 -0
  159. data/test/excludes/PostgresqlFullTextTest.rb +3 -0
  160. data/test/excludes/PostgresqlGeometricTest.rb +4 -0
  161. data/test/excludes/PostgresqlHstoreTest.rb +45 -0
  162. data/test/excludes/PostgresqlInfinityTest.rb +5 -0
  163. data/test/excludes/PostgresqlIntervalTest.rb +1 -0
  164. data/test/excludes/PostgresqlJSONBTest.rb +27 -0
  165. data/test/excludes/PostgresqlJSONTest.rb +27 -0
  166. data/test/excludes/PostgresqlLtreeTest.rb +4 -0
  167. data/test/excludes/PostgresqlMoneyTest.rb +12 -0
  168. data/test/excludes/PostgresqlNetworkTest.rb +69 -0
  169. data/test/excludes/PostgresqlNumberTest.rb +1 -0
  170. data/test/excludes/PostgresqlPointTest.rb +15 -0
  171. data/test/excludes/PostgresqlRangeTest.rb +3 -0
  172. data/test/excludes/PostgresqlRenameTableTest.rb +2 -0
  173. data/test/excludes/PostgresqlSerialTest.rb +7 -0
  174. data/test/excludes/PostgresqlTimestampFixtureTest.rb +2 -0
  175. data/test/excludes/PostgresqlTimestampMigrationTest.rb +3 -0
  176. data/test/excludes/PostgresqlTypeLookupTest.rb +2 -0
  177. data/test/excludes/PostgresqlUUIDGenerationTest.rb +7 -0
  178. data/test/excludes/PostgresqlUUIDTest.rb +1 -0
  179. data/test/excludes/PostgresqlVirtualColumnTest.rb +17 -0
  180. data/test/excludes/PostgresqlXMLTest.rb +5 -0
  181. data/test/excludes/PrimaryKeyIntegerNilDefaultTest.rb +1 -0
  182. data/test/excludes/PrimaryKeyIntegerTest.rb +3 -0
  183. data/test/excludes/PrimaryKeysTest.rb +2 -0
  184. data/test/excludes/RelationMergingTest.rb +15 -0
  185. data/test/excludes/RelationTest.rb +3 -0
  186. data/test/excludes/ReservedWordsMigrationTest.rb +1 -0
  187. data/test/excludes/SameNameDifferentDatabaseFixturesTest.rb +1 -0
  188. data/test/excludes/SanitizeTest.rb +13 -0
  189. data/test/excludes/SchemaAuthorizationTest.rb +8 -0
  190. data/test/excludes/SchemaCreateTableOptionsTest.rb +2 -0
  191. data/test/excludes/SchemaDumperDefaultsTest.rb +1 -0
  192. data/test/excludes/SchemaDumperTest.rb +11 -0
  193. data/test/excludes/SchemaForeignKeyTest.rb +1 -0
  194. data/test/excludes/SchemaIndexNullsOrderTest.rb +2 -0
  195. data/test/excludes/SchemaIndexOpclassTest.rb +3 -0
  196. data/test/excludes/SchemaTest.rb +49 -0
  197. data/test/excludes/SequenceNameDetectionTestCases/CollidedSequenceNameTest.rb +1 -0
  198. data/test/excludes/SequenceNameDetectionTestCases/LongerSequenceNameDetectionTest.rb +1 -0
  199. data/test/excludes/StrictLoadingFixturesTest.rb +1 -0
  200. data/test/excludes/TestFixturesTest.rb +1 -0
  201. data/test/excludes/TransactionInstrumentationTest.rb +1 -0
  202. data/test/excludes/TransactionIsolationTest.rb +1 -0
  203. data/test/excludes/TypeTest.rb +1 -0
  204. data/test/excludes/UniquenessValidationTest.rb +2 -0
  205. data/test/excludes/UnloggedTablesTest.rb +3 -0
  206. data/test/excludes/UnsafeRawSqlTest.rb +2 -0
  207. data/test/excludes/UpdateableViewTest.rb +5 -0
  208. data/test/excludes/WithAnnotationsTest.rb +6 -0
  209. data/test/models/building.rb +4 -0
  210. data/test/models/spatial_model.rb +5 -0
  211. data/test/schema/cockroachdb_specific_schema.rb +218 -0
  212. data/test/support/copy_cat.rb +83 -0
  213. data/test/support/exclude_from_transactional_tests.rb +33 -0
  214. data/test/support/paths_cockroachdb.rb +46 -0
  215. data/test/support/rake_helpers.rb +37 -0
  216. data/test/support/sql_logger.rb +55 -0
  217. data/test/support/template_creator.rb +114 -0
  218. metadata +422 -34
  219. data/.editorconfig +0 -7
  220. data/.github/issue_template.md +0 -46
  221. data/.github/reproduction_scripts/migrations.rb +0 -60
  222. data/.github/reproduction_scripts/models_and_database.rb +0 -49
  223. data/.github/workflows/ci.yml +0 -96
  224. data/.github/workflows/docker.yml +0 -57
  225. data/.gitignore +0 -18
  226. data/.gitmodules +0 -0
  227. data/activerecord-cockroachdb-adapter.gemspec +0 -38
  228. data/bin/console +0 -36
  229. data/bin/console_schemas/default.rb +0 -11
  230. data/bin/console_schemas/schemas.rb +0 -23
  231. data/bin/setup +0 -8
  232. data/bin/start-cockroachdb +0 -33
  233. data/build/Dockerfile +0 -14
  234. data/build/config.teamcity.yml +0 -31
  235. data/build/local-test.sh +0 -32
  236. data/build/teamcity-test.sh +0 -76
  237. data/docker.sh +0 -35
  238. data/lib/active_record/connection_adapters/cockroachdb/spatial_column_info.rb +0 -60
  239. data/setup.sql +0 -18
@@ -0,0 +1,108 @@
1
+ require "cases/helper_cockroachdb"
2
+
3
+ require "support/connection_helper"
4
+
5
+ require "models/bird"
6
+ require "models/parrot"
7
+ require "models/pirate"
8
+ require "models/price_estimate"
9
+ require "models/ship"
10
+ require "models/treasure"
11
+
12
+ module CockroachDB
13
+ class WithAnnotationsTest < ActiveRecord::TestCase
14
+ self.use_transactional_tests = false
15
+
16
+ fixtures :pirates, :treasures, :parrots
17
+
18
+ def test_belongs_to_with_annotation_includes_a_query_comment
19
+ pirate = SpacePirate.where.not(parrot_id: nil).first
20
+ assert pirate, "should have a Pirate record"
21
+
22
+ log = capture_sql do
23
+ pirate.parrot
24
+ end
25
+ assert_not_predicate log, :empty?
26
+ assert_predicate log.select { |query| query.match?(%r{/\*}) }, :empty?
27
+
28
+ assert_queries_match(%r{/\* that tells jokes \*/}) do
29
+ pirate.parrot_with_annotation
30
+ end
31
+ end
32
+
33
+ def test_has_and_belongs_to_many_with_annotation_includes_a_query_comment
34
+ pirate = SpacePirate.first
35
+ assert pirate, "should have a Pirate record"
36
+
37
+ log = capture_sql do
38
+ pirate.parrots.first
39
+ end
40
+ assert_not_predicate log, :empty?
41
+ assert_predicate log.select { |query| query.match?(%r{/\*}) }, :empty?
42
+
43
+ assert_queries_match(%r{/\* that are very colorful \*/}) do
44
+ pirate.parrots_with_annotation.first
45
+ end
46
+ end
47
+
48
+ def test_has_one_with_annotation_includes_a_query_comment
49
+ pirate = SpacePirate.first
50
+ assert pirate, "should have a Pirate record"
51
+
52
+ log = capture_sql do
53
+ pirate.ship
54
+ end
55
+ assert_not_predicate log, :empty?
56
+ assert_predicate log.select { |query| query.match?(%r{/\*}) }, :empty?
57
+
58
+ assert_queries_match(%r{/\* that is a rocket \*/}) do
59
+ pirate.ship_with_annotation
60
+ end
61
+ end
62
+
63
+ def test_has_many_with_annotation_includes_a_query_comment
64
+ pirate = SpacePirate.first
65
+ assert pirate, "should have a Pirate record"
66
+
67
+ log = capture_sql do
68
+ pirate.birds.first
69
+ end
70
+ assert_not_predicate log, :empty?
71
+ assert_predicate log.select { |query| query.match?(%r{/\*}) }, :empty?
72
+
73
+ assert_queries_match(%r{/\* that are also parrots \*/}) do
74
+ pirate.birds_with_annotation.first
75
+ end
76
+ end
77
+
78
+ def test_has_many_through_with_annotation_includes_a_query_comment
79
+ pirate = SpacePirate.first
80
+ assert pirate, "should have a Pirate record"
81
+
82
+ log = capture_sql do
83
+ pirate.treasure_estimates.first
84
+ end
85
+ assert_not_predicate log, :empty?
86
+ assert_predicate log.select { |query| query.match?(%r{/\*}) }, :empty?
87
+
88
+ assert_queries_match(%r{/\* yarrr \*/}) do
89
+ pirate.treasure_estimates_with_annotation.first
90
+ end
91
+ end
92
+
93
+ def test_has_many_through_with_annotation_includes_a_query_comment_when_eager_loading
94
+ pirate = SpacePirate.first
95
+ assert pirate, "should have a Pirate record"
96
+
97
+ log = capture_sql do
98
+ pirate.treasure_estimates.first
99
+ end
100
+ assert_not_predicate log, :empty?
101
+ assert_predicate log.select { |query| query.match?(%r{/\*}) }, :empty?
102
+
103
+ assert_queries_match(%r{/\* yarrr \*/}) do
104
+ SpacePirate.includes(:treasure_estimates_with_annotation, :treasures).first
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,31 @@
1
+ require "cases/helper_cockroachdb"
2
+
3
+ module CockroachDB
4
+ class BasicsTest < ActiveRecord::TestCase
5
+ # This replaces the same test that's been excluded from BasicsTest. It's
6
+ # exactly the same, except badchar has an entry for CockroachDBAdapter.
7
+ def test_column_names_are_escaped
8
+ conn = ActiveRecord::Base.lease_connection
9
+ classname = conn.class.name[/[^:]*$/]
10
+ badchar = {
11
+ "SQLite3Adapter" => '"',
12
+ "Mysql2Adapter" => "`",
13
+ "PostgreSQLAdapter" => '"',
14
+ "OracleAdapter" => '"',
15
+ "FbAdapter" => '"',
16
+ "CockroachDBAdapter" => '"'
17
+ }.fetch(classname) {
18
+ raise "need a bad char for #{classname}"
19
+ }
20
+
21
+ quoted = conn.quote_column_name "foo#{badchar}bar"
22
+ if current_adapter?(:OracleAdapter)
23
+ # Oracle does not allow double quotes in table and column names at all
24
+ # therefore quoting removes them
25
+ assert_equal("#{badchar}foobar#{badchar}", quoted)
26
+ else
27
+ assert_equal("#{badchar}foo#{badchar * 2}bar#{badchar}", quoted)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper"
4
+ require "support/schema_dumping_helper"
5
+
6
+ # Copy of comment_test from ActiveRecord with all but two tests removed.
7
+ # We can get these tests to pass by enabling an experimental feature in
8
+ # setup, so we exclude them from the AR test cases and run them here.
9
+ if ActiveRecord::Base.lease_connection.supports_comments?
10
+ module CockroachDB
11
+ class CommentTest < ActiveRecord::TestCase
12
+ include SchemaDumpingHelper
13
+
14
+ self.use_transactional_tests = false
15
+
16
+ class Commented < ActiveRecord::Base
17
+ self.table_name = "commenteds"
18
+ end
19
+
20
+ setup do
21
+ @connection = ActiveRecord::Base.lease_connection
22
+
23
+ @connection.create_table("commenteds", comment: "A table with comment", force: true) do |t|
24
+ t.string "name", comment: "Comment should help clarify the column purpose"
25
+ t.boolean "obvious", comment: "Question is: should you comment obviously named objects?"
26
+ t.string "content"
27
+ t.index "name", comment: %Q["Very important" index that powers all the performance.\nAnd it's fun!]
28
+ end
29
+
30
+ Commented.reset_column_information
31
+ end
32
+
33
+ teardown do
34
+ @connection.drop_table "commenteds", if_exists: true
35
+ end
36
+
37
+ # This test is modified from the original
38
+ # The original changes the column type from a boolean to a string,
39
+ # but once this happens, comment changes don't work, so I'm not altering
40
+ # the type here.
41
+ def test_remove_comment_from_column
42
+ @connection.change_column :commenteds, :obvious, :boolean, comment: nil
43
+
44
+ Commented.reset_column_information
45
+ column = Commented.columns_hash["obvious"]
46
+
47
+ assert_equal :boolean, column.type
48
+ assert_nil column.comment
49
+ end
50
+
51
+ def test_schema_dump_with_comments
52
+ # Do all the stuff from other tests
53
+ @connection.add_column :commenteds, :rating, :integer, comment: "I am running out of imagination"
54
+ @connection.change_column :commenteds, :content, :string, comment: "Whoa, content describes itself!"
55
+ @connection.change_column :commenteds, :content, :string
56
+ @connection.change_column :commenteds, :obvious, :boolean, comment: nil
57
+ @connection.add_index :commenteds, :obvious, name: "idx_obvious", comment: "We need to see obvious comments"
58
+
59
+ # And check that these changes are reflected in dump
60
+ output = dump_table_schema "commenteds"
61
+ assert_match %r[create_table "commenteds",.*\s+comment: "A table with comment"], output
62
+ assert_match %r[t\.string\s+"name",\s+comment: "Comment should help clarify the column purpose"], output
63
+ assert_match %r[t\.boolean\s+"obvious"\n], output
64
+ assert_match %r[t\.string\s+"content",\s+comment: "Whoa, content describes itself!"], output
65
+ if current_adapter?(:OracleAdapter)
66
+ assert_match %r[t\.integer\s+"rating",\s+precision: 38,\s+comment: "I am running out of imagination"], output
67
+ else
68
+ assert_match %r[t\.bigint\s+"rating",\s+comment: "I am running out of imagination"], output
69
+ assert_match %r[t\.index\s+.+\s+comment: "\\\"Very important\\\" index that powers all the performance.\\nAnd it's fun!"], output
70
+ assert_match %r[t\.index\s+.+\s+name: "idx_obvious",\s+comment: "We need to see obvious comments"], output
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper_cockroachdb"
4
+ require "models/account"
5
+
6
+ module CockroachDB
7
+ module ConnectionAdapters
8
+ class TypeTest < ActiveRecord::TestCase
9
+ fixtures :accounts
10
+ class FakeModel < ActiveRecord::Base
11
+ establish_connection(
12
+ adapter: "fake"
13
+ )
14
+ end
15
+ def test_type_can_be_used_with_various_db
16
+ skip "Fails in CI, see issue #341"
17
+ assert_equal(
18
+ :postgresql,
19
+ ActiveRecord::Type.adapter_name_from(Account)
20
+ )
21
+ assert_equal(
22
+ :fake,
23
+ ActiveRecord::Type.adapter_name_from(FakeModel)
24
+ )
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cases/helper_cockroachdb"
4
+ require "support/copy_cat"
5
+
6
+ module CockroachDB
7
+ class ResolverTest < ::ActiveRecord::ConnectionAdapters::PoolConfig::ResolverTest
8
+ CopyCat.copy_methods(self, ::ActiveRecord::ConnectionAdapters::PoolConfig::ResolverTest,
9
+ :test_url_invalid_adapter) do
10
+ # We're not in the ActiveRecord namespace anymore.
11
+ def on_const(node)
12
+ return unless node in [:const, nil, :AdapterNotFound|:Base]
13
+
14
+ insert_before(node.loc.expression, "ActiveRecord::")
15
+ end
16
+
17
+ def on_str(node)
18
+ return unless node in [:str, /\ADatabase config/]
19
+
20
+ replace(node.loc.expression, node.children.first.sub("abstract,", "abstract, cockroachdb,").inspect)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,45 @@
1
+ require "cases/helper_cockroachdb"
2
+
3
+ # Load dependencies from ActiveRecord test suite
4
+ require "support/schema_dumping_helper"
5
+
6
+ module CockroachDB
7
+ class DefaultExpressionTest < ActiveRecord::TestCase
8
+ include SchemaDumpingHelper
9
+
10
+ # This replaces the same test that's been excluded from
11
+ # PostgresqlDefaultExpressionTest. The assertions have updated to match
12
+ # against CockroachDB's current_date() and current_timestamp() functions.
13
+ # See test/excludes/PostgresqlDefaultExpressionTest.rb.
14
+ test "schema dump includes default expression" do
15
+ output = dump_table_schema("defaults")
16
+
17
+ assert_match %r/t\.date\s+"modified_date",\s+default: -> { \"current_date\(\)\" }/, output
18
+ assert_match %r/t\.datetime\s+"modified_time",\s+default: -> { "current_timestamp\(\)" }/, output
19
+
20
+ assert_match %r/t\.date\s+"modified_date_function",\s+default: -> { "now\(\)" }/, output
21
+ assert_match %r/t\.datetime\s+"modified_time_function",\s+default: -> { "now\(\)" }/, output
22
+ end
23
+ end
24
+
25
+ class DefaultNumbersTest < ActiveRecord::TestCase
26
+ class DefaultNumber < ActiveRecord::Base; end
27
+
28
+ setup do
29
+ @connection = ActiveRecord::Base.lease_connection
30
+ @connection.create_table :default_numbers do |t|
31
+ t.decimal :decimal_number, precision: 32, scale: 16, default: 0
32
+ end
33
+ end
34
+
35
+ teardown do
36
+ @connection.drop_table :default_numbers, if_exists: true
37
+ end
38
+
39
+ def test_default_decimal_zero_with_large_scale
40
+ record = DefaultNumber.new
41
+ assert_equal 0.0, record.decimal_number
42
+ assert_equal 0.0, record.decimal_number_before_type_cast
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,24 @@
1
+ require "cases/helper"
2
+
3
+ module CockroachDB
4
+ class DirtyTest < ActiveRecord::TestCase
5
+ self.use_transactional_tests = false
6
+
7
+ class Testings < ActiveRecord::Base; end
8
+
9
+ # This replaces the same test that's been excluded from DirtyTest. We can
10
+ # run it here with use_transactional_tests set to false.
11
+ # See test/excludes/DirtyTest.rb
12
+ def test_field_named_field
13
+ ActiveRecord::Base.lease_connection.create_table :testings do |t|
14
+ t.string :field
15
+ end
16
+ assert_nothing_raised do
17
+ Testings.new.attributes
18
+ end
19
+ ensure
20
+ ActiveRecord::Base.lease_connection.drop_table :testings, if_exists: true
21
+ ActiveRecord::Base.clear_cache!
22
+ end
23
+ end
24
+ end