tgbyte-activerecord-jdbc-adapter 1.2.2.2

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 (218) hide show
  1. data/.gitignore +22 -0
  2. data/.travis.yml +8 -0
  3. data/Gemfile +14 -0
  4. data/Gemfile.lock +40 -0
  5. data/History.txt +488 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.rdoc +199 -0
  8. data/Rakefile +60 -0
  9. data/activerecord-jdbc-adapter.gemspec +23 -0
  10. data/bench/bench_attributes.rb +13 -0
  11. data/bench/bench_attributes_new.rb +14 -0
  12. data/bench/bench_create.rb +12 -0
  13. data/bench/bench_find_all.rb +12 -0
  14. data/bench/bench_find_all_mt.rb +25 -0
  15. data/bench/bench_model.rb +85 -0
  16. data/bench/bench_new.rb +12 -0
  17. data/bench/bench_new_valid.rb +12 -0
  18. data/bench/bench_valid.rb +13 -0
  19. data/lib/active_record/connection_adapters/derby_adapter.rb +1 -0
  20. data/lib/active_record/connection_adapters/h2_adapter.rb +1 -0
  21. data/lib/active_record/connection_adapters/hsqldb_adapter.rb +1 -0
  22. data/lib/active_record/connection_adapters/informix_adapter.rb +1 -0
  23. data/lib/active_record/connection_adapters/jdbc_adapter.rb +1 -0
  24. data/lib/active_record/connection_adapters/jndi_adapter.rb +1 -0
  25. data/lib/active_record/connection_adapters/mssql_adapter.rb +1 -0
  26. data/lib/active_record/connection_adapters/mysql2_adapter.rb +1 -0
  27. data/lib/active_record/connection_adapters/mysql_adapter.rb +1 -0
  28. data/lib/active_record/connection_adapters/oracle_adapter.rb +1 -0
  29. data/lib/active_record/connection_adapters/postgresql_adapter.rb +1 -0
  30. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +1 -0
  31. data/lib/activerecord-jdbc-adapter.rb +8 -0
  32. data/lib/arel/engines/sql/compilers/db2_compiler.rb +9 -0
  33. data/lib/arel/engines/sql/compilers/derby_compiler.rb +6 -0
  34. data/lib/arel/engines/sql/compilers/h2_compiler.rb +6 -0
  35. data/lib/arel/engines/sql/compilers/hsqldb_compiler.rb +15 -0
  36. data/lib/arel/engines/sql/compilers/jdbc_compiler.rb +6 -0
  37. data/lib/arel/engines/sql/compilers/mssql_compiler.rb +46 -0
  38. data/lib/arel/visitors/compat.rb +13 -0
  39. data/lib/arel/visitors/db2.rb +17 -0
  40. data/lib/arel/visitors/derby.rb +32 -0
  41. data/lib/arel/visitors/firebird.rb +24 -0
  42. data/lib/arel/visitors/hsqldb.rb +26 -0
  43. data/lib/arel/visitors/sql_server.rb +46 -0
  44. data/lib/arjdbc.rb +24 -0
  45. data/lib/arjdbc/db2.rb +2 -0
  46. data/lib/arjdbc/db2/adapter.rb +510 -0
  47. data/lib/arjdbc/derby.rb +7 -0
  48. data/lib/arjdbc/derby/adapter.rb +358 -0
  49. data/lib/arjdbc/derby/connection_methods.rb +19 -0
  50. data/lib/arjdbc/discover.rb +92 -0
  51. data/lib/arjdbc/firebird.rb +2 -0
  52. data/lib/arjdbc/firebird/adapter.rb +136 -0
  53. data/lib/arjdbc/h2.rb +4 -0
  54. data/lib/arjdbc/h2/adapter.rb +54 -0
  55. data/lib/arjdbc/h2/connection_methods.rb +13 -0
  56. data/lib/arjdbc/hsqldb.rb +4 -0
  57. data/lib/arjdbc/hsqldb/adapter.rb +184 -0
  58. data/lib/arjdbc/hsqldb/connection_methods.rb +15 -0
  59. data/lib/arjdbc/informix.rb +3 -0
  60. data/lib/arjdbc/informix/adapter.rb +138 -0
  61. data/lib/arjdbc/informix/connection_methods.rb +11 -0
  62. data/lib/arjdbc/jdbc.rb +2 -0
  63. data/lib/arjdbc/jdbc/adapter.rb +356 -0
  64. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  65. data/lib/arjdbc/jdbc/base_ext.rb +15 -0
  66. data/lib/arjdbc/jdbc/callbacks.rb +44 -0
  67. data/lib/arjdbc/jdbc/column.rb +47 -0
  68. data/lib/arjdbc/jdbc/compatibility.rb +51 -0
  69. data/lib/arjdbc/jdbc/connection.rb +134 -0
  70. data/lib/arjdbc/jdbc/connection_methods.rb +16 -0
  71. data/lib/arjdbc/jdbc/core_ext.rb +24 -0
  72. data/lib/arjdbc/jdbc/discover.rb +18 -0
  73. data/lib/arjdbc/jdbc/driver.rb +35 -0
  74. data/lib/arjdbc/jdbc/extension.rb +47 -0
  75. data/lib/arjdbc/jdbc/java.rb +14 -0
  76. data/lib/arjdbc/jdbc/jdbc.rake +131 -0
  77. data/lib/arjdbc/jdbc/missing_functionality_helper.rb +88 -0
  78. data/lib/arjdbc/jdbc/quoted_primary_key.rb +28 -0
  79. data/lib/arjdbc/jdbc/railtie.rb +9 -0
  80. data/lib/arjdbc/jdbc/rake_tasks.rb +10 -0
  81. data/lib/arjdbc/jdbc/require_driver.rb +16 -0
  82. data/lib/arjdbc/jdbc/type_converter.rb +126 -0
  83. data/lib/arjdbc/mimer.rb +2 -0
  84. data/lib/arjdbc/mimer/adapter.rb +142 -0
  85. data/lib/arjdbc/mssql.rb +4 -0
  86. data/lib/arjdbc/mssql/adapter.rb +477 -0
  87. data/lib/arjdbc/mssql/connection_methods.rb +31 -0
  88. data/lib/arjdbc/mssql/limit_helpers.rb +101 -0
  89. data/lib/arjdbc/mssql/lock_helpers.rb +72 -0
  90. data/lib/arjdbc/mssql/tsql_helper.rb +61 -0
  91. data/lib/arjdbc/mysql.rb +4 -0
  92. data/lib/arjdbc/mysql/adapter.rb +505 -0
  93. data/lib/arjdbc/mysql/connection_methods.rb +28 -0
  94. data/lib/arjdbc/oracle.rb +3 -0
  95. data/lib/arjdbc/oracle/adapter.rb +428 -0
  96. data/lib/arjdbc/oracle/connection_methods.rb +12 -0
  97. data/lib/arjdbc/postgresql.rb +4 -0
  98. data/lib/arjdbc/postgresql/adapter.rb +825 -0
  99. data/lib/arjdbc/postgresql/connection_methods.rb +23 -0
  100. data/lib/arjdbc/sqlite3.rb +4 -0
  101. data/lib/arjdbc/sqlite3/adapter.rb +389 -0
  102. data/lib/arjdbc/sqlite3/connection_methods.rb +35 -0
  103. data/lib/arjdbc/sybase.rb +2 -0
  104. data/lib/arjdbc/sybase/adapter.rb +46 -0
  105. data/lib/arjdbc/version.rb +8 -0
  106. data/lib/generators/jdbc/USAGE +10 -0
  107. data/lib/generators/jdbc/jdbc_generator.rb +9 -0
  108. data/lib/jdbc_adapter.rb +2 -0
  109. data/lib/jdbc_adapter/rake_tasks.rb +3 -0
  110. data/lib/jdbc_adapter/version.rb +3 -0
  111. data/lib/pg.rb +26 -0
  112. data/pom.xml +57 -0
  113. data/rails_generators/jdbc_generator.rb +15 -0
  114. data/rails_generators/templates/config/initializers/jdbc.rb +7 -0
  115. data/rails_generators/templates/lib/tasks/jdbc.rake +8 -0
  116. data/rakelib/bundler_ext.rb +11 -0
  117. data/rakelib/compile.rake +23 -0
  118. data/rakelib/db.rake +39 -0
  119. data/rakelib/rails.rake +41 -0
  120. data/src/java/arjdbc/db2/DB2RubyJdbcConnection.java +62 -0
  121. data/src/java/arjdbc/derby/DerbyModule.java +324 -0
  122. data/src/java/arjdbc/h2/H2RubyJdbcConnection.java +70 -0
  123. data/src/java/arjdbc/informix/InformixRubyJdbcConnection.java +74 -0
  124. data/src/java/arjdbc/jdbc/AdapterJavaService.java +68 -0
  125. data/src/java/arjdbc/jdbc/JdbcConnectionFactory.java +36 -0
  126. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +1326 -0
  127. data/src/java/arjdbc/jdbc/SQLBlock.java +48 -0
  128. data/src/java/arjdbc/mssql/MssqlRubyJdbcConnection.java +127 -0
  129. data/src/java/arjdbc/mysql/MySQLModule.java +134 -0
  130. data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +161 -0
  131. data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +85 -0
  132. data/src/java/arjdbc/postgresql/PostgresqlRubyJdbcConnection.java +82 -0
  133. data/src/java/arjdbc/sqlite3/Sqlite3RubyJdbcConnection.java +126 -0
  134. data/test/abstract_db_create.rb +135 -0
  135. data/test/activerecord/connection_adapters/type_conversion_test.rb +31 -0
  136. data/test/activerecord/connections/native_jdbc_mysql/connection.rb +25 -0
  137. data/test/activerecord/jall.sh +7 -0
  138. data/test/activerecord/jtest.sh +3 -0
  139. data/test/db/db2.rb +11 -0
  140. data/test/db/derby.rb +12 -0
  141. data/test/db/h2.rb +11 -0
  142. data/test/db/hsqldb.rb +13 -0
  143. data/test/db/informix.rb +11 -0
  144. data/test/db/jdbc.rb +12 -0
  145. data/test/db/jndi_config.rb +40 -0
  146. data/test/db/logger.rb +3 -0
  147. data/test/db/mssql.rb +9 -0
  148. data/test/db/mysql.rb +10 -0
  149. data/test/db/oracle.rb +34 -0
  150. data/test/db/postgres.rb +9 -0
  151. data/test/db/sqlite3.rb +11 -0
  152. data/test/db2_reset_column_information_test.rb +8 -0
  153. data/test/db2_simple_test.rb +66 -0
  154. data/test/derby_migration_test.rb +68 -0
  155. data/test/derby_multibyte_test.rb +12 -0
  156. data/test/derby_reset_column_information_test.rb +8 -0
  157. data/test/derby_row_locking_test.rb +9 -0
  158. data/test/derby_simple_test.rb +139 -0
  159. data/test/generic_jdbc_connection_test.rb +29 -0
  160. data/test/h2_change_column_test.rb +68 -0
  161. data/test/h2_simple_test.rb +41 -0
  162. data/test/has_many_through.rb +79 -0
  163. data/test/helper.rb +87 -0
  164. data/test/hsqldb_simple_test.rb +6 -0
  165. data/test/informix_simple_test.rb +48 -0
  166. data/test/jdbc_common.rb +28 -0
  167. data/test/jndi_callbacks_test.rb +36 -0
  168. data/test/jndi_test.rb +25 -0
  169. data/test/manualTestDatabase.rb +191 -0
  170. data/test/models/add_not_null_column_to_table.rb +9 -0
  171. data/test/models/auto_id.rb +15 -0
  172. data/test/models/data_types.rb +30 -0
  173. data/test/models/entry.rb +40 -0
  174. data/test/models/mixed_case.rb +22 -0
  175. data/test/models/reserved_word.rb +15 -0
  176. data/test/models/string_id.rb +17 -0
  177. data/test/models/thing.rb +16 -0
  178. data/test/models/validates_uniqueness_of_string.rb +19 -0
  179. data/test/mssql_db_create_test.rb +26 -0
  180. data/test/mssql_identity_insert_test.rb +19 -0
  181. data/test/mssql_ignore_system_views_test.rb +27 -0
  182. data/test/mssql_legacy_types_test.rb +58 -0
  183. data/test/mssql_limit_offset_test.rb +136 -0
  184. data/test/mssql_multibyte_test.rb +18 -0
  185. data/test/mssql_null_test.rb +14 -0
  186. data/test/mssql_reset_column_information_test.rb +8 -0
  187. data/test/mssql_row_locking_sql_test.rb +159 -0
  188. data/test/mssql_row_locking_test.rb +9 -0
  189. data/test/mssql_simple_test.rb +55 -0
  190. data/test/mysql_db_create_test.rb +27 -0
  191. data/test/mysql_index_length_test.rb +58 -0
  192. data/test/mysql_info_test.rb +123 -0
  193. data/test/mysql_multibyte_test.rb +10 -0
  194. data/test/mysql_nonstandard_primary_key_test.rb +42 -0
  195. data/test/mysql_reset_column_information_test.rb +8 -0
  196. data/test/mysql_simple_test.rb +125 -0
  197. data/test/oracle_reset_column_information_test.rb +8 -0
  198. data/test/oracle_simple_test.rb +18 -0
  199. data/test/oracle_specific_test.rb +83 -0
  200. data/test/postgres_db_create_test.rb +32 -0
  201. data/test/postgres_drop_db_test.rb +16 -0
  202. data/test/postgres_information_schema_leak_test.rb +29 -0
  203. data/test/postgres_mixed_case_test.rb +29 -0
  204. data/test/postgres_native_type_mapping_test.rb +89 -0
  205. data/test/postgres_nonseq_pkey_test.rb +38 -0
  206. data/test/postgres_reserved_test.rb +22 -0
  207. data/test/postgres_reset_column_information_test.rb +8 -0
  208. data/test/postgres_schema_search_path_test.rb +48 -0
  209. data/test/postgres_simple_test.rb +167 -0
  210. data/test/postgres_table_alias_length_test.rb +15 -0
  211. data/test/postgres_type_conversion_test.rb +34 -0
  212. data/test/row_locking.rb +90 -0
  213. data/test/simple.rb +717 -0
  214. data/test/sqlite3_reset_column_information_test.rb +8 -0
  215. data/test/sqlite3_simple_test.rb +316 -0
  216. data/test/sybase_jtds_simple_test.rb +28 -0
  217. data/test/sybase_reset_column_information_test.rb +8 -0
  218. metadata +275 -0
@@ -0,0 +1,32 @@
1
+ require 'abstract_db_create'
2
+ require 'db/postgres'
3
+
4
+ class PostgresDbCreateTest < Test::Unit::TestCase
5
+ include AbstractDbCreate
6
+
7
+ def db_config
8
+ POSTGRES_CONFIG
9
+ end
10
+
11
+ if find_executable?("psql")
12
+ def test_rake_db_create
13
+ Rake::Task["db:create"].invoke
14
+ output = `psql -d template1 -c '\\l'`
15
+ assert output =~ /#{@db_name}/m
16
+ end
17
+
18
+ def test_rake_db_test_purge
19
+ Rake::Task["db:create"].invoke
20
+ Rake::Task["db:test:purge"].invoke
21
+ end
22
+ else
23
+ def test_skipped
24
+ end
25
+ end
26
+
27
+ def test_rake_db_create_does_not_load_full_environment
28
+ Rake::Task["db:create"].invoke
29
+ assert @rails_env_set
30
+ assert !defined?(@full_environment_loaded) || !@full_environment_loaded
31
+ end
32
+ end
@@ -0,0 +1,16 @@
1
+ require 'abstract_db_create'
2
+ require 'db/postgres'
3
+
4
+ class PostgresDbDropTest < Test::Unit::TestCase
5
+ include AbstractDbCreate
6
+
7
+ def db_config
8
+ POSTGRES_CONFIG
9
+ end
10
+
11
+ def test_dropping_nonexistent_database_does_not_raise_exception
12
+ assert_nothing_raised do
13
+ Rake::Task["db:drop"].invoke
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,29 @@
1
+ require 'jdbc_common'
2
+ require 'db/postgres'
3
+
4
+ class CreateISLSchema < ActiveRecord::Migration
5
+ def self.up
6
+ execute "CREATE TABLE domains (id int, name varchar(16))"
7
+ end
8
+
9
+ def self.down
10
+ execute "DROP TABLE domains"
11
+ end
12
+ end
13
+
14
+ class Domain < ActiveRecord::Base
15
+ end
16
+
17
+ class PostgresInformationSchemaLeakTest < Test::Unit::TestCase
18
+ def setup
19
+ CreateISLSchema.up
20
+ end
21
+
22
+ def teardown
23
+ CreateISLSchema.down
24
+ end
25
+
26
+ def test_columns
27
+ assert_equal(%w{id name}, Domain.column_names)
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ require 'jdbc_common'
2
+ require 'models/entry'
3
+ require 'models/mixed_case'
4
+
5
+ class MixedCaseTest < Test::Unit::TestCase
6
+ def setup
7
+ Migration::MixedCase.up
8
+ @table_name = User.table_name
9
+ User.table_name = 'tblUsers'
10
+ User.reset_column_information
11
+ end
12
+
13
+ def teardown
14
+ User.table_name = @table_name
15
+ User.reset_column_information
16
+ Migration::MixedCase.down
17
+ end
18
+
19
+ def test_create
20
+ mixed_case = MixedCase.create :SOME_value => 'some value'
21
+ assert_equal 'some value', mixed_case.SOME_value
22
+ end
23
+
24
+ def test_find_mixed_table_name
25
+ User.create :firstName => "Nick", :lastName => "Sieger"
26
+ u = User.find :first
27
+ assert_equal "Nick Sieger", "#{u.firstName} #{u.lastName}"
28
+ end
29
+ end
@@ -0,0 +1,89 @@
1
+ require 'jdbc_common'
2
+ require 'db/postgres'
3
+
4
+ class CreateNativeTypeMappingTestSchema < ActiveRecord::Migration
5
+ def self.up
6
+ execute "DROP SEQUENCE IF EXISTS seq_pk_customers"
7
+ execute "CREATE SEQUENCE seq_pk_customers"
8
+ execute %q{
9
+ CREATE TABLE customers (
10
+ bigint_serial_should_be_integer bigint default nextval('seq_pk_customers'),
11
+ integer_serial_should_be_integer integer default nextval('seq_pk_customers'),
12
+ varchar_should_be_string varchar(2),
13
+ timestamp_should_be_datetime timestamp,
14
+ bytea_should_be_binary bytea,
15
+ double_precision_should_be_float double precision,
16
+ real_should_be_float real,
17
+ bool_should_be_boolean bool,
18
+ interval_should_be_string interval,
19
+ bigint_should_be_integer bigint,
20
+ uuid_should_be_string uuid
21
+ )}
22
+ end
23
+
24
+ def self.down
25
+ execute "DROP TABLE customers"
26
+ execute "DROP SEQUENCE IF EXISTS seq_pk_customers"
27
+ end
28
+ end
29
+
30
+ class Customer < ActiveRecord::Base
31
+ end
32
+
33
+ class PostgresNativeTypeMappingTest < Test::Unit::TestCase
34
+ def setup
35
+ CreateNativeTypeMappingTestSchema.up
36
+ end
37
+
38
+ def teardown
39
+ CreateNativeTypeMappingTestSchema.down
40
+ end
41
+
42
+ def column_type(column_name)
43
+ Customer.columns.detect { |c| c.name == column_name }.type
44
+ end
45
+
46
+ def test_uuid_column_should_map_to_string
47
+ assert_equal :string, column_type("uuid_should_be_string")
48
+ end
49
+
50
+ def test_bigint_serial_should_be_mapped_to_integer
51
+ assert_equal :integer, column_type("bigint_serial_should_be_integer")
52
+ end
53
+
54
+ def test_integer_serial_should_be_mapped_to_integer
55
+ assert_equal :integer, column_type("integer_serial_should_be_integer")
56
+ end
57
+
58
+ def test_varchar_should_be_mapped_to_string
59
+ assert_equal :string, column_type("varchar_should_be_string")
60
+ end
61
+
62
+ def test_timestamp_should_be_mapped_to_datetime
63
+ assert_equal :datetime, column_type("timestamp_should_be_datetime")
64
+ end
65
+
66
+ def test_bytea_should_be_mapped_to_binary
67
+ assert_equal :binary, column_type("bytea_should_be_binary")
68
+ end
69
+
70
+ def test_double_precision_should_be_mapped_to_float
71
+ assert_equal :float, column_type("double_precision_should_be_float")
72
+ end
73
+
74
+ def test_real_should_be_mapped_to_float
75
+ assert_equal :float, column_type("real_should_be_float")
76
+ end
77
+
78
+ def test_bool_should_be_mapped_to_boolean
79
+ assert_equal :boolean, column_type("bool_should_be_boolean")
80
+ end
81
+
82
+ def test_interval_should_be_mapped_to_string
83
+ assert_equal :string, column_type("interval_should_be_string")
84
+ end
85
+
86
+ def test_bigint_should_be_mapped_to_integer
87
+ assert_equal :integer, column_type("bigint_should_be_integer")
88
+ end
89
+ end
@@ -0,0 +1,38 @@
1
+ require 'jdbc_common'
2
+ require 'db/postgres'
3
+
4
+ class CreateUrls < ActiveRecord::Migration
5
+ def self.up
6
+ create_table 'urls', :id => false do |t|
7
+ t.text :uhash, :null => false
8
+ t.text :url, :null => false
9
+ end
10
+ execute "ALTER TABLE urls ADD PRIMARY KEY (uhash)"
11
+ end
12
+ def self.down
13
+ drop_table 'urls'
14
+ end
15
+ end
16
+
17
+ class Url < ActiveRecord::Base
18
+ self.primary_key = :uhash
19
+ #Shouldn't be needed: set_sequence_name nil
20
+ end
21
+
22
+ class PostgresNonSeqPKey < Test::Unit::TestCase
23
+ def setup
24
+ CreateUrls.up
25
+ end
26
+
27
+ def teardown
28
+ CreateUrls.down
29
+ end
30
+
31
+ def test_create
32
+ url = Url.create! do |u|
33
+ u.uhash = 'uhash'
34
+ u.url = 'http://url'
35
+ end
36
+ assert_equal( 'uhash', url.uhash )
37
+ end
38
+ end
@@ -0,0 +1,22 @@
1
+ require 'jdbc_common'
2
+ require 'db/postgres'
3
+ require 'models/reserved_word'
4
+
5
+ class PostgresReservedWordsTest < Test::Unit::TestCase
6
+ def setup
7
+ CreateReservedWords.up
8
+ end
9
+ def teardown
10
+ CreateReservedWords.down
11
+ end
12
+
13
+ def test_quote_reserved_word_column
14
+ columns = ReservedWord.column_names - ["id"]
15
+ ReservedWord.connection.add_index :reserved_words, columns
16
+ indexes = ReservedWord.connection.indexes("reserved_words")
17
+ assert_equal 1, indexes.size
18
+ columns.each do |c|
19
+ assert indexes[0].columns.include?(c), "#{indexes[0].columns.inspect} does not include #{c.inspect}"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,8 @@
1
+ #! /usr/bin/env jruby
2
+
3
+ require 'jdbc_common'
4
+ require 'db/postgres'
5
+
6
+ class PostgresResetColumnInformationTest < Test::Unit::TestCase
7
+ include ResetColumnInformationTestMethods
8
+ end
@@ -0,0 +1,48 @@
1
+ require 'jdbc_common'
2
+ require 'db/postgres'
3
+
4
+ class CreateSchema < ActiveRecord::Migration
5
+ def self.up
6
+ execute "CREATE SCHEMA test"
7
+ execute "CREATE TABLE test.people (id serial, name text)"
8
+ execute "INSERT INTO test.people (name) VALUES ('Alex')"
9
+ execute "CREATE TABLE public.people (id serial, wrongname text)"
10
+ end
11
+
12
+ def self.down
13
+ execute "DROP SCHEMA test CASCADE"
14
+ execute "DROP TABLE people"
15
+ end
16
+ end
17
+
18
+ class Person < ActiveRecord::Base
19
+ establish_connection POSTGRES_CONFIG.merge(:schema_search_path => 'test,public')
20
+ end
21
+
22
+ class PostgresSchemaSearchPathTest < Test::Unit::TestCase
23
+ def setup
24
+ CreateSchema.up
25
+ end
26
+
27
+ def teardown
28
+ CreateSchema.down
29
+ end
30
+
31
+ def test_columns
32
+ assert_equal(%w{id name}, Person.column_names)
33
+ end
34
+
35
+ def test_find_right
36
+ assert_not_nil Person.find_by_name("Alex")
37
+ end
38
+
39
+ def test_find_wrong
40
+ assert_raise NoMethodError do
41
+ Person.find_by_wrongname("Alex")
42
+ end
43
+ end
44
+ def test_column_information
45
+ assert Person.columns.map{|col| col.name}.include?("name")
46
+ assert !Person.columns.map{|col| col.name}.include?("wrongname")
47
+ end
48
+ end
@@ -0,0 +1,167 @@
1
+ # To run this script, set up the following postgres user and database:
2
+ #
3
+ # sudo -u postgres createuser -D -A -P blog
4
+ # sudo -u postgres createdb -O blog weblog_development
5
+ #
6
+
7
+ require 'jdbc_common'
8
+ require 'db/postgres'
9
+
10
+ class PostgresSimpleTest < Test::Unit::TestCase
11
+ include SimpleTestMethods
12
+ include ActiveRecord3TestMethods
13
+ include ColumnNameQuotingTests
14
+
15
+ def test_adapter_class_name_equals_native_adapter_class_name
16
+ classname = @connection.class.name[/[^:]*$/]
17
+ assert_equal 'PostgreSQLAdapter', classname
18
+ end
19
+
20
+ def test_encoding
21
+ assert_not_nil @connection.encoding
22
+ end
23
+
24
+ def test_multi_statement_support
25
+ results = @connection.execute "SELECT title from entries; SELECT login from users"
26
+ assert_equal 2, results.length
27
+ assert_equal ["title"], results[0].first.keys
28
+ assert_equal ["login"], results[1].first.keys
29
+ end
30
+
31
+ def test_create_xml_column
32
+ assert_nothing_raised do
33
+ @connection.create_table :xml_testings do |t|
34
+ t.column :xml_test, :xml
35
+ end
36
+ end
37
+
38
+ xml_test = @connection.columns(:xml_testings).detect do
39
+ |c| c.name == "xml_test"
40
+ end
41
+
42
+ assert_equal "xml", xml_test.sql_type
43
+ ensure
44
+ @connection.drop_table :xml_testings rescue nil
45
+ end
46
+
47
+ def test_create_table_with_limits
48
+ assert_nothing_raised do
49
+ @connection.create_table :testings do |t|
50
+ t.column :eleven_int, :integer, :limit => 11
51
+ end
52
+ end
53
+
54
+ columns = @connection.columns(:testings)
55
+ eleven = columns.detect { |c| c.name == "eleven_int" }
56
+ assert_equal "integer", eleven.sql_type
57
+ ensure
58
+ @connection.drop_table :testings rescue nil
59
+ end
60
+ end
61
+
62
+ class PostgresTimestampTest < Test::Unit::TestCase
63
+ def setup
64
+ DbTypeMigration.up
65
+ end
66
+
67
+ def teardown
68
+ DbTypeMigration.down
69
+ end
70
+
71
+ def test_string_is_character_varying
72
+ sample_string = DbType.connection.columns(:db_types).detect do |c|
73
+ c.name == "sample_string"
74
+ end
75
+
76
+ assert_match(/^character varying/, sample_string.sql_type)
77
+ end
78
+
79
+ # infinite timestamp tests based on rails tests for postgresql_adapter.rb
80
+ def test_load_infinity_and_beyond
81
+ d = DbType.find_by_sql("select 'infinity'::timestamp as sample_timestamp")
82
+ assert d.first.sample_timestamp.infinite?, 'timestamp should be infinite'
83
+
84
+ d = DbType.find_by_sql "select '-infinity'::timestamp as sample_timestamp"
85
+ time = d.first.sample_timestamp
86
+ assert time.infinite?, "timestamp should be infinte"
87
+ assert_operator time, :<, 0
88
+ end
89
+
90
+ def test_save_infinity_and_beyond
91
+ d = DbType.create!(:sample_timestamp => 1.0 / 0.0)
92
+ assert_equal(1.0 / 0.0, d.sample_timestamp)
93
+
94
+ e = DbType.create!(:sample_timestamp => -1.0 / 0.0)
95
+ assert_equal(-1.0 / 0.0, e.sample_timestamp)
96
+ end
97
+ end
98
+
99
+ class PostgresDeserializationTest < Test::Unit::TestCase
100
+ def setup
101
+ DbTypeMigration.up
102
+ end
103
+
104
+ def teardown
105
+ DbTypeMigration.down
106
+ end
107
+
108
+ def test_should_keep_float_precision
109
+ expected = DbType.create(:sample_float => 7.3)
110
+ actual = DbType.find(expected.id)
111
+
112
+ assert_equal expected.sample_float, actual.sample_float
113
+ end
114
+ end
115
+
116
+ class PostgresSchemaDumperTest < Test::Unit::TestCase
117
+ def setup
118
+ DbTypeMigration.up
119
+ @connection = ActiveRecord::Base.connection
120
+ strio = StringIO.new
121
+ ActiveRecord::SchemaDumper::dump(ActiveRecord::Base.connection, strio)
122
+ @dump = strio.string
123
+ end
124
+
125
+ def teardown
126
+ DbTypeMigration.down
127
+ end
128
+
129
+ # http://kenai.com/jira/browse/ACTIVERECORD_JDBC-135
130
+ def test_schema_dump_should_not_have_limits_on_boolean
131
+ lines = @dump.lines.grep(/boolean/)
132
+ assert !lines.empty?
133
+ lines.each {|line| assert line !~ /limit/ }
134
+ end
135
+
136
+
137
+ def test_schema_dump_should_not_have_limits_on_binaries
138
+ lines = @dump.lines.grep(/binary/)
139
+ assert !lines.empty?, 'no binary type definitions found'
140
+ lines.each {|line| assert line !~ /limit/, 'binary definition contains limit' }
141
+ end
142
+
143
+ # http://kenai.com/jira/browse/ACTIVERECORD_JDBC-139
144
+ def test_schema_dump_should_not_have_limits_on_text_or_date
145
+ lines = @dump.lines.grep(/date|text/)
146
+ assert !lines.empty?
147
+ lines.each {|line| assert line !~ /limit/ }
148
+ end
149
+
150
+ def test_schema_dump_integer_with_no_limit_should_have_no_limit
151
+ lines = @dump.lines.grep(/sample_integer_no_limit/)
152
+ assert !lines.empty?
153
+ lines.each {|line| assert line !~ /:limit/ }
154
+ end
155
+
156
+ def test_schema_dump_integer_with_limit_2_should_have_limit_2
157
+ lines = @dump.lines.grep(/sample_integer_with_limit_2/)
158
+ assert !lines.empty?
159
+ lines.each {|line| assert line =~ /limit => 2/ }
160
+ end
161
+
162
+ def test_schema_dump_integer_with_limit_8_should_have_limit_8
163
+ lines = @dump.lines.grep(/sample_integer_with_limit_8/)
164
+ assert !lines.empty?
165
+ lines.each {|line| assert line =~ /limit => 8/ }
166
+ end
167
+ end