cmoran92-activerecord-jdbc-adapter 1.2.1

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 (202) hide show
  1. data/.gitignore +22 -0
  2. data/.travis.yml +8 -0
  3. data/Gemfile +14 -0
  4. data/Gemfile.lock +42 -0
  5. data/History.txt +469 -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 +25 -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 +44 -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 +351 -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 +354 -0
  64. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  65. data/lib/arjdbc/jdbc/callbacks.rb +44 -0
  66. data/lib/arjdbc/jdbc/column.rb +47 -0
  67. data/lib/arjdbc/jdbc/compatibility.rb +51 -0
  68. data/lib/arjdbc/jdbc/connection.rb +134 -0
  69. data/lib/arjdbc/jdbc/connection_methods.rb +16 -0
  70. data/lib/arjdbc/jdbc/core_ext.rb +24 -0
  71. data/lib/arjdbc/jdbc/discover.rb +18 -0
  72. data/lib/arjdbc/jdbc/driver.rb +35 -0
  73. data/lib/arjdbc/jdbc/extension.rb +47 -0
  74. data/lib/arjdbc/jdbc/java.rb +14 -0
  75. data/lib/arjdbc/jdbc/jdbc.rake +131 -0
  76. data/lib/arjdbc/jdbc/missing_functionality_helper.rb +87 -0
  77. data/lib/arjdbc/jdbc/quoted_primary_key.rb +28 -0
  78. data/lib/arjdbc/jdbc/railtie.rb +9 -0
  79. data/lib/arjdbc/jdbc/rake_tasks.rb +10 -0
  80. data/lib/arjdbc/jdbc/require_driver.rb +16 -0
  81. data/lib/arjdbc/jdbc/type_converter.rb +126 -0
  82. data/lib/arjdbc/mimer.rb +2 -0
  83. data/lib/arjdbc/mimer/adapter.rb +142 -0
  84. data/lib/arjdbc/mssql.rb +4 -0
  85. data/lib/arjdbc/mssql/adapter.rb +468 -0
  86. data/lib/arjdbc/mssql/connection_methods.rb +31 -0
  87. data/lib/arjdbc/mssql/limit_helpers.rb +108 -0
  88. data/lib/arjdbc/mssql/tsql_helper.rb +61 -0
  89. data/lib/arjdbc/mysql.rb +4 -0
  90. data/lib/arjdbc/mysql/adapter.rb +505 -0
  91. data/lib/arjdbc/mysql/connection_methods.rb +28 -0
  92. data/lib/arjdbc/oracle.rb +3 -0
  93. data/lib/arjdbc/oracle/adapter.rb +428 -0
  94. data/lib/arjdbc/oracle/connection_methods.rb +12 -0
  95. data/lib/arjdbc/postgresql.rb +4 -0
  96. data/lib/arjdbc/postgresql/adapter.rb +825 -0
  97. data/lib/arjdbc/postgresql/connection_methods.rb +23 -0
  98. data/lib/arjdbc/sqlite3.rb +4 -0
  99. data/lib/arjdbc/sqlite3/adapter.rb +387 -0
  100. data/lib/arjdbc/sqlite3/connection_methods.rb +35 -0
  101. data/lib/arjdbc/sybase.rb +2 -0
  102. data/lib/arjdbc/sybase/adapter.rb +46 -0
  103. data/lib/arjdbc/version.rb +8 -0
  104. data/lib/generators/jdbc/USAGE +10 -0
  105. data/lib/generators/jdbc/jdbc_generator.rb +9 -0
  106. data/lib/jdbc_adapter.rb +2 -0
  107. data/lib/jdbc_adapter/rake_tasks.rb +3 -0
  108. data/lib/jdbc_adapter/version.rb +3 -0
  109. data/lib/pg.rb +26 -0
  110. data/pom.xml +57 -0
  111. data/rails_generators/jdbc_generator.rb +15 -0
  112. data/rails_generators/templates/config/initializers/jdbc.rb +7 -0
  113. data/rails_generators/templates/lib/tasks/jdbc.rake +8 -0
  114. data/rakelib/bundler_ext.rb +11 -0
  115. data/rakelib/compile.rake +23 -0
  116. data/rakelib/db.rake +39 -0
  117. data/rakelib/rails.rake +41 -0
  118. data/src/java/arjdbc/db2/DB2RubyJdbcConnection.java +62 -0
  119. data/src/java/arjdbc/derby/DerbyModule.java +324 -0
  120. data/src/java/arjdbc/h2/H2RubyJdbcConnection.java +70 -0
  121. data/src/java/arjdbc/informix/InformixRubyJdbcConnection.java +74 -0
  122. data/src/java/arjdbc/jdbc/AdapterJavaService.java +68 -0
  123. data/src/java/arjdbc/jdbc/JdbcConnectionFactory.java +36 -0
  124. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +1331 -0
  125. data/src/java/arjdbc/jdbc/SQLBlock.java +48 -0
  126. data/src/java/arjdbc/mssql/MssqlRubyJdbcConnection.java +127 -0
  127. data/src/java/arjdbc/mysql/MySQLModule.java +134 -0
  128. data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +161 -0
  129. data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +85 -0
  130. data/src/java/arjdbc/postgresql/PostgresqlRubyJdbcConnection.java +82 -0
  131. data/src/java/arjdbc/sqlite3/Sqlite3RubyJdbcConnection.java +126 -0
  132. data/test/abstract_db_create.rb +135 -0
  133. data/test/activerecord/connection_adapters/type_conversion_test.rb +31 -0
  134. data/test/activerecord/connections/native_jdbc_mysql/connection.rb +25 -0
  135. data/test/activerecord/jall.sh +7 -0
  136. data/test/activerecord/jtest.sh +3 -0
  137. data/test/db/db2.rb +11 -0
  138. data/test/db/derby.rb +12 -0
  139. data/test/db/h2.rb +11 -0
  140. data/test/db/hsqldb.rb +13 -0
  141. data/test/db/informix.rb +11 -0
  142. data/test/db/jdbc.rb +12 -0
  143. data/test/db/jndi_config.rb +40 -0
  144. data/test/db/logger.rb +3 -0
  145. data/test/db/mssql.rb +9 -0
  146. data/test/db/mysql.rb +10 -0
  147. data/test/db/oracle.rb +34 -0
  148. data/test/db/postgres.rb +9 -0
  149. data/test/db/sqlite3.rb +11 -0
  150. data/test/db2_simple_test.rb +66 -0
  151. data/test/derby_migration_test.rb +68 -0
  152. data/test/derby_multibyte_test.rb +12 -0
  153. data/test/derby_simple_test.rb +99 -0
  154. data/test/generic_jdbc_connection_test.rb +29 -0
  155. data/test/h2_change_column_test.rb +68 -0
  156. data/test/h2_simple_test.rb +41 -0
  157. data/test/has_many_through.rb +79 -0
  158. data/test/helper.rb +85 -0
  159. data/test/hsqldb_simple_test.rb +6 -0
  160. data/test/informix_simple_test.rb +48 -0
  161. data/test/jdbc_common.rb +27 -0
  162. data/test/jndi_callbacks_test.rb +40 -0
  163. data/test/jndi_test.rb +25 -0
  164. data/test/manualTestDatabase.rb +191 -0
  165. data/test/models/add_not_null_column_to_table.rb +9 -0
  166. data/test/models/auto_id.rb +15 -0
  167. data/test/models/data_types.rb +30 -0
  168. data/test/models/entry.rb +40 -0
  169. data/test/models/mixed_case.rb +22 -0
  170. data/test/models/reserved_word.rb +15 -0
  171. data/test/models/string_id.rb +17 -0
  172. data/test/models/thing.rb +16 -0
  173. data/test/models/validates_uniqueness_of_string.rb +19 -0
  174. data/test/mssql_db_create_test.rb +26 -0
  175. data/test/mssql_identity_insert_test.rb +19 -0
  176. data/test/mssql_legacy_types_test.rb +58 -0
  177. data/test/mssql_limit_offset_test.rb +136 -0
  178. data/test/mssql_multibyte_test.rb +18 -0
  179. data/test/mssql_simple_test.rb +55 -0
  180. data/test/mysql_db_create_test.rb +27 -0
  181. data/test/mysql_index_length_test.rb +58 -0
  182. data/test/mysql_info_test.rb +123 -0
  183. data/test/mysql_multibyte_test.rb +10 -0
  184. data/test/mysql_nonstandard_primary_key_test.rb +42 -0
  185. data/test/mysql_simple_test.rb +125 -0
  186. data/test/oracle_simple_test.rb +18 -0
  187. data/test/oracle_specific_test.rb +83 -0
  188. data/test/postgres_db_create_test.rb +32 -0
  189. data/test/postgres_drop_db_test.rb +16 -0
  190. data/test/postgres_information_schema_leak_test.rb +29 -0
  191. data/test/postgres_mixed_case_test.rb +29 -0
  192. data/test/postgres_native_type_mapping_test.rb +89 -0
  193. data/test/postgres_nonseq_pkey_test.rb +38 -0
  194. data/test/postgres_reserved_test.rb +22 -0
  195. data/test/postgres_schema_search_path_test.rb +48 -0
  196. data/test/postgres_simple_test.rb +167 -0
  197. data/test/postgres_table_alias_length_test.rb +15 -0
  198. data/test/postgres_type_conversion_test.rb +34 -0
  199. data/test/simple.rb +658 -0
  200. data/test/sqlite3_simple_test.rb +284 -0
  201. data/test/sybase_jtds_simple_test.rb +28 -0
  202. metadata +261 -0
@@ -0,0 +1,125 @@
1
+ # To run this script, run the following in a mysql instance:
2
+ #
3
+ # drop database if exists weblog_development;
4
+ # create database weblog_development;
5
+ # grant all on weblog_development.* to blog@localhost;
6
+ # flush privileges;
7
+
8
+ require 'jdbc_common'
9
+ require 'db/mysql'
10
+
11
+ class MysqlSimpleTest < Test::Unit::TestCase
12
+ include SimpleTestMethods
13
+ include ActiveRecord3TestMethods
14
+ include ColumnNameQuotingTests
15
+
16
+ column_quote_char "`"
17
+
18
+ def test_column_class_instantiation
19
+ text_column = nil
20
+ assert_nothing_raised do
21
+ text_column = ActiveRecord::ConnectionAdapters::MysqlColumn.
22
+ new("title", nil, "text")
23
+ end
24
+ assert_not_nil text_column
25
+ end
26
+
27
+ def test_string_quoting_oddity
28
+ s = "0123456789a'a"
29
+ assert_equal "'0123456789a\\'a'", ActiveRecord::Base.connection.quote(s)
30
+
31
+ s2 = s[10,3]
32
+ assert_equal "a'a", s2
33
+ assert_equal "'a\\'a'", ActiveRecord::Base.connection.quote(s2)
34
+ end
35
+
36
+ def test_table_name_quoting_with_dot
37
+ s = "#{MYSQL_CONFIG[:database]}.posts"
38
+ assert_equal "`#{MYSQL_CONFIG[:database]}`.`posts`", ActiveRecord::Base.connection.quote_table_name(s)
39
+ end
40
+
41
+ def test_update_all_with_limit
42
+ assert_nothing_raised { Entry.update_all({:title => "test"}, {}, {:limit => 1}) }
43
+ end
44
+
45
+ # from rails active record tests
46
+ def test_update_all_with_joins_and_offset_and_order
47
+ user_1 = User.create :login => 'user_1'
48
+ user_2 = User.create :login => 'user_2'
49
+
50
+ entry_1 = Entry.create :title => 'title_1', :content => 'content_1', :rating => 0,
51
+ :user_id => user_1.id
52
+ entry_2 = Entry.create :title => 'title_2', :content => 'content_2', :rating => 1,
53
+ :user_id => user_2.id
54
+
55
+ all_entries = Entry.joins(:user).where('users.id' => user_1.id).
56
+ order('users.id', 'entries.id')
57
+ count = all_entries.count
58
+ entries = all_entries.offset(1)
59
+
60
+ assert_equal count - 1, entries.update_all(:user_id => user_2.id)
61
+ assert_equal user_2, Entry.find_by_title('title_2').user
62
+ end
63
+
64
+ # from rails active record tests
65
+ def test_caching_of_columns
66
+ user = User.create :login => 'test'
67
+ # clear cache possibly created by other tests
68
+ user.entries.reset_column_information
69
+
70
+ # One query for columns, one for primary key
71
+ assert_queries(2) { user.entries.columns; user.entries.columns }
72
+
73
+ ## and again to verify that reset_column_information clears the cache correctly
74
+ user.entries.reset_column_information
75
+ assert_queries(2) { user.entries.columns; user.entries.columns }
76
+ end
77
+
78
+ # from rails active record tests
79
+ def test_drop_index_from_table_named_values
80
+ connection = Entry.connection
81
+ connection.create_table :values, :force => true do |t|
82
+ t.integer :value
83
+ end
84
+
85
+ assert_nothing_raised do
86
+ connection.add_index :values, :value
87
+ connection.remove_index :values, :column => :value
88
+ end
89
+
90
+ connection.drop_table :values rescue nil
91
+ end
92
+
93
+ def test_find_in_other_schema_with_include
94
+ old_entries_table_name = Entry.table_name
95
+ old_users_table_name = User.table_name
96
+ begin
97
+ User.set_table_name "#{MYSQL_CONFIG[:database]}.users"
98
+ Entry.set_table_name "#{MYSQL_CONFIG[:database]}.entries"
99
+ assert !Entry.all(:include => :user).empty?
100
+ ensure
101
+ Entry.set_table_name old_entries_table_name
102
+ User.set_table_name old_users_table_name
103
+ end
104
+ end
105
+
106
+ def test_create_xml_column
107
+ assert_nothing_raised do
108
+ @connection.create_table :xml_testings do |t|
109
+ t.xml :xml_test
110
+ end
111
+ end
112
+
113
+ xml_test = @connection.columns(:xml_testings).detect do |c|
114
+ c.name == "xml_test"
115
+ end
116
+
117
+ assert_equal "text", xml_test.sql_type
118
+ ensure
119
+ @connection.drop_table :xml_testings rescue nil
120
+ end
121
+ end
122
+
123
+ class MysqlHasManyThroughTest < Test::Unit::TestCase
124
+ include HasManyThroughMethods
125
+ end
@@ -0,0 +1,18 @@
1
+ require 'jdbc_common'
2
+ require 'db/oracle'
3
+
4
+ class OracleSimpleTest < Test::Unit::TestCase
5
+ include SimpleTestMethods
6
+
7
+ def test_default_id_type_is_integer
8
+ assert Integer === Entry.first.id
9
+ end
10
+
11
+ def test_sequences_are_not_cached
12
+ ActiveRecord::Base.transaction do
13
+ e1 = Entry.create :title => "hello1"
14
+ e2 = Entry.create :title => "hello2"
15
+ assert e1.id != e2.id
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,83 @@
1
+ require 'jdbc_common'
2
+ require 'db/oracle'
3
+
4
+ class DefaultNumber < ActiveRecord::Base
5
+ end
6
+
7
+ class OracleSpecificTest < Test::Unit::TestCase
8
+ include MultibyteTestMethods # so we can get @java_con
9
+
10
+ def setup
11
+ super
12
+ @java_con.createStatement.execute "
13
+ CREATE TABLE DEFAULT_NUMBERS (
14
+ ID INTEGER NOT NULL PRIMARY KEY, VALUE NUMBER, DATUM DATE, FPOINT NUMBER(10,2), VALUE2 NUMBER(15)
15
+ )"
16
+ @java_con.createStatement.execute "
17
+ INSERT INTO DEFAULT_NUMBERS (ID, VALUE, DATUM, FPOINT, VALUE2)
18
+ VALUES (1, 0.076, TIMESTAMP'2009-11-05 00:00:00', 1000.01, 1234)"
19
+ @java_con.createStatement.execute "CREATE SYNONYM POSTS FOR ENTRIES"
20
+ end
21
+
22
+ def teardown
23
+ @java_con.createStatement.execute "DROP TABLE DEFAULT_NUMBERS"
24
+ @java_con.createStatement.execute "DROP SYNONYM POSTS"
25
+ super
26
+ end
27
+
28
+ def test_default_number_precision
29
+ assert_equal 0.076, DefaultNumber.find(:first).value
30
+ end
31
+
32
+ def test_number_with_precision_and_scale
33
+ assert_equal 1000.01, DefaultNumber.find(:first).fpoint
34
+ end
35
+
36
+ def test_number_with_precision
37
+ assert_equal 1234, DefaultNumber.find(:first).value2
38
+ end
39
+
40
+ def test_number_type_with_precision_and_scale_is_reported_correctly
41
+ assert_equal 'NUMBER', DefaultNumber.columns_hash['value'].sql_type
42
+ assert_equal 'NUMBER(10,2)', DefaultNumber.columns_hash['fpoint'].sql_type
43
+ assert_equal 'NUMBER(15)', DefaultNumber.columns_hash['value2'].sql_type
44
+ end
45
+
46
+ # JRUBY-3675, ACTIVERECORD_JDBC-22
47
+ def test_load_date
48
+ obj = DefaultNumber.find(:first)
49
+ assert_not_nil obj.datum, "no date"
50
+ end
51
+
52
+ # ACTIVERECORD_JDBC-127
53
+ def test_save_date
54
+ obj = DefaultNumber.find(:first)
55
+ obj.datum = '01Jan2010'
56
+ obj.save!
57
+ end
58
+
59
+ def test_save_timestamp
60
+ obj = DefaultNumber.find(:first)
61
+ obj.datum = Time.now
62
+ obj.save!
63
+ end
64
+
65
+ def test_load_null_date
66
+ @java_con.createStatement.execute "UPDATE DEFAULT_NUMBERS SET DATUM = NULL"
67
+ obj = DefaultNumber.find(:first)
68
+ assert obj.datum.nil?
69
+ end
70
+
71
+ def test_model_access_by_synonym
72
+ @klass = Class.new(ActiveRecord::Base)
73
+ @klass.set_table_name "POSTS"
74
+ entry_columns = Entry.columns_hash
75
+ @klass.columns.each do |c|
76
+ ec = entry_columns[c.name]
77
+ assert ec
78
+ assert_equal ec.sql_type, c.sql_type
79
+ assert_equal ec.type, c.type
80
+ end
81
+ end
82
+
83
+ end if defined?(JRUBY_VERSION)
@@ -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
+ set_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