activerecord-jdbc-adapter 1.0.3-java → 50.1-java
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 +33 -0
- data/.travis.yml +79 -0
- data/.yardopts +4 -0
- data/CONTRIBUTING.md +50 -0
- data/Gemfile +91 -0
- data/History.md +1191 -0
- data/LICENSE.txt +22 -17
- data/README.md +169 -0
- data/RUNNING_TESTS.md +127 -0
- data/Rakefile +294 -5
- data/Rakefile.jdbc +20 -0
- data/activerecord-jdbc-adapter.gemspec +55 -0
- data/lib/active_record/connection_adapters/as400_adapter.rb +2 -0
- data/lib/active_record/connection_adapters/db2_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/firebird_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/mariadb_adapter.rb +1 -0
- data/lib/active_record/connection_adapters/sqlserver_adapter.rb +1 -0
- data/lib/activerecord-jdbc-adapter.rb +0 -5
- data/lib/arel/visitors/compat.rb +60 -0
- data/lib/arel/visitors/db2.rb +128 -6
- data/lib/arel/visitors/derby.rb +103 -10
- data/lib/arel/visitors/firebird.rb +79 -0
- data/lib/arel/visitors/h2.rb +25 -0
- data/lib/arel/visitors/hsqldb.rb +18 -10
- data/lib/arel/visitors/postgresql_jdbc.rb +6 -0
- data/lib/arel/visitors/sql_server.rb +225 -0
- data/lib/arel/visitors/sql_server/ng42.rb +293 -0
- data/lib/arjdbc.rb +11 -21
- data/lib/arjdbc/abstract/connection_management.rb +35 -0
- data/lib/arjdbc/abstract/core.rb +64 -0
- data/lib/arjdbc/abstract/database_statements.rb +64 -0
- data/lib/arjdbc/abstract/statement_cache.rb +58 -0
- data/lib/arjdbc/abstract/transaction_support.rb +86 -0
- data/lib/arjdbc/db2.rb +3 -1
- data/lib/arjdbc/db2/adapter.rb +630 -250
- data/lib/arjdbc/db2/as400.rb +130 -0
- data/lib/arjdbc/db2/column.rb +167 -0
- data/lib/arjdbc/db2/connection_methods.rb +44 -0
- data/lib/arjdbc/derby.rb +1 -5
- data/lib/arjdbc/derby/active_record_patch.rb +13 -0
- data/lib/arjdbc/derby/adapter.rb +409 -217
- data/lib/arjdbc/derby/connection_methods.rb +16 -14
- data/lib/arjdbc/derby/schema_creation.rb +15 -0
- data/lib/arjdbc/discover.rb +62 -50
- data/lib/arjdbc/firebird.rb +3 -1
- data/lib/arjdbc/firebird/adapter.rb +365 -62
- data/lib/arjdbc/firebird/connection_methods.rb +23 -0
- data/lib/arjdbc/h2.rb +2 -3
- data/lib/arjdbc/h2/adapter.rb +273 -6
- data/lib/arjdbc/h2/connection_methods.rb +23 -8
- data/lib/arjdbc/hsqldb.rb +2 -3
- data/lib/arjdbc/hsqldb/adapter.rb +204 -77
- data/lib/arjdbc/hsqldb/connection_methods.rb +24 -10
- data/lib/arjdbc/hsqldb/explain_support.rb +35 -0
- data/lib/arjdbc/hsqldb/schema_creation.rb +11 -0
- data/lib/arjdbc/informix.rb +4 -2
- data/lib/arjdbc/informix/adapter.rb +78 -54
- data/lib/arjdbc/informix/connection_methods.rb +8 -9
- data/lib/arjdbc/jdbc.rb +59 -2
- data/lib/arjdbc/jdbc/adapter.rb +356 -166
- data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
- data/lib/arjdbc/jdbc/adapter_require.rb +46 -0
- data/lib/arjdbc/jdbc/base_ext.rb +15 -0
- data/lib/arjdbc/jdbc/callbacks.rb +27 -18
- data/lib/arjdbc/jdbc/column.rb +79 -20
- data/lib/arjdbc/jdbc/connection.rb +5 -119
- data/lib/arjdbc/jdbc/connection_methods.rb +32 -4
- data/lib/arjdbc/jdbc/error.rb +65 -0
- data/lib/arjdbc/jdbc/extension.rb +41 -29
- data/lib/arjdbc/jdbc/java.rb +5 -6
- data/lib/arjdbc/jdbc/jdbc.rake +3 -126
- data/lib/arjdbc/jdbc/railtie.rb +2 -9
- data/lib/arjdbc/jdbc/rake_tasks.rb +3 -10
- data/lib/arjdbc/jdbc/serialized_attributes_helper.rb +3 -0
- data/lib/arjdbc/jdbc/type_cast.rb +166 -0
- data/lib/arjdbc/jdbc/type_converter.rb +35 -19
- data/lib/arjdbc/mssql.rb +6 -3
- data/lib/arjdbc/mssql/adapter.rb +630 -298
- data/lib/arjdbc/mssql/column.rb +200 -0
- data/lib/arjdbc/mssql/connection_methods.rb +66 -17
- data/lib/arjdbc/mssql/explain_support.rb +99 -0
- data/lib/arjdbc/mssql/limit_helpers.rb +189 -50
- data/lib/arjdbc/mssql/lock_methods.rb +77 -0
- data/lib/arjdbc/mssql/types.rb +343 -0
- data/lib/arjdbc/mssql/utils.rb +82 -0
- data/lib/arjdbc/mysql.rb +2 -3
- data/lib/arjdbc/mysql/adapter.rb +86 -356
- data/lib/arjdbc/mysql/connection_methods.rb +159 -23
- data/lib/arjdbc/oracle/adapter.rb +714 -263
- data/lib/arjdbc/postgresql.rb +2 -3
- data/lib/arjdbc/postgresql/_bc_time_cast_patch.rb +24 -0
- data/lib/arjdbc/postgresql/adapter.rb +570 -400
- data/lib/arjdbc/postgresql/base/array_decoder.rb +26 -0
- data/lib/arjdbc/postgresql/base/array_encoder.rb +25 -0
- data/lib/arjdbc/postgresql/base/array_parser.rb +95 -0
- data/lib/arjdbc/postgresql/base/pgconn.rb +11 -0
- data/lib/arjdbc/postgresql/column.rb +51 -0
- data/lib/arjdbc/postgresql/connection_methods.rb +57 -18
- data/lib/arjdbc/postgresql/name.rb +24 -0
- data/lib/arjdbc/postgresql/oid_types.rb +192 -0
- data/lib/arjdbc/railtie.rb +11 -0
- data/lib/arjdbc/sqlite3.rb +2 -3
- data/lib/arjdbc/sqlite3/adapter.rb +518 -198
- data/lib/arjdbc/sqlite3/connection_methods.rb +49 -24
- data/lib/arjdbc/sybase.rb +2 -2
- data/lib/arjdbc/sybase/adapter.rb +7 -6
- data/lib/arjdbc/tasks.rb +13 -0
- data/lib/arjdbc/tasks/database_tasks.rb +52 -0
- data/lib/arjdbc/tasks/databases.rake +91 -0
- data/lib/arjdbc/tasks/databases3.rake +215 -0
- data/lib/arjdbc/tasks/databases4.rake +39 -0
- data/lib/arjdbc/tasks/db2_database_tasks.rb +104 -0
- data/lib/arjdbc/tasks/derby_database_tasks.rb +95 -0
- data/lib/arjdbc/tasks/h2_database_tasks.rb +31 -0
- data/lib/arjdbc/tasks/hsqldb_database_tasks.rb +70 -0
- data/lib/arjdbc/tasks/jdbc_database_tasks.rb +169 -0
- data/lib/arjdbc/tasks/mssql_database_tasks.rb +46 -0
- data/lib/arjdbc/util/quoted_cache.rb +60 -0
- data/lib/arjdbc/util/serialized_attributes.rb +98 -0
- data/lib/arjdbc/util/table_copier.rb +110 -0
- data/lib/arjdbc/version.rb +1 -6
- data/lib/generators/jdbc/USAGE +9 -0
- data/lib/generators/jdbc/jdbc_generator.rb +8 -0
- data/lib/jdbc_adapter.rb +1 -1
- data/lib/jdbc_adapter/rake_tasks.rb +3 -2
- data/lib/jdbc_adapter/version.rb +2 -1
- data/pom.xml +114 -0
- data/rails_generators/jdbc_generator.rb +1 -1
- data/rails_generators/templates/config/initializers/jdbc.rb +8 -5
- data/rails_generators/templates/lib/tasks/jdbc.rake +7 -4
- data/rakelib/01-tomcat.rake +51 -0
- data/rakelib/02-test.rake +132 -0
- data/rakelib/bundler_ext.rb +11 -0
- data/rakelib/compile.rake +67 -22
- data/rakelib/db.rake +61 -0
- data/rakelib/rails.rake +204 -29
- data/src/java/arjdbc/ArJdbcModule.java +286 -0
- data/src/java/arjdbc/db2/DB2Module.java +76 -0
- data/src/java/arjdbc/db2/DB2RubyJdbcConnection.java +126 -0
- data/src/java/arjdbc/derby/DerbyModule.java +99 -243
- data/src/java/arjdbc/derby/DerbyRubyJdbcConnection.java +152 -0
- data/src/java/arjdbc/firebird/FirebirdRubyJdbcConnection.java +174 -0
- data/src/java/arjdbc/{jdbc/JdbcConnectionFactory.java → h2/H2Module.java} +20 -6
- data/src/java/arjdbc/h2/H2RubyJdbcConnection.java +27 -12
- data/src/java/arjdbc/hsqldb/HSQLDBModule.java +73 -0
- data/src/java/arjdbc/informix/InformixRubyJdbcConnection.java +7 -6
- data/src/java/arjdbc/jdbc/AdapterJavaService.java +7 -29
- data/src/java/arjdbc/jdbc/Callable.java +44 -0
- data/src/java/arjdbc/jdbc/ConnectionFactory.java +132 -0
- data/src/java/arjdbc/jdbc/DataSourceConnectionFactory.java +157 -0
- data/src/java/arjdbc/jdbc/DriverConnectionFactory.java +63 -0
- data/src/java/arjdbc/jdbc/DriverWrapper.java +119 -0
- data/src/java/arjdbc/jdbc/JdbcResult.java +130 -0
- data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +3622 -948
- data/src/java/arjdbc/mssql/MSSQLModule.java +90 -0
- data/src/java/arjdbc/mssql/MSSQLRubyJdbcConnection.java +181 -0
- data/src/java/arjdbc/mysql/MySQLModule.java +99 -81
- data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +294 -0
- data/src/java/arjdbc/oracle/OracleModule.java +80 -0
- data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +387 -17
- data/src/java/arjdbc/postgresql/ByteaUtils.java +157 -0
- data/src/java/arjdbc/postgresql/PgResultSetMetaDataWrapper.java +23 -0
- data/src/java/arjdbc/postgresql/PostgreSQLModule.java +77 -0
- data/src/java/arjdbc/postgresql/PostgreSQLResult.java +184 -0
- data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +952 -0
- data/src/java/arjdbc/sqlite3/SQLite3Module.java +73 -0
- data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +525 -0
- data/src/java/arjdbc/util/CallResultSet.java +826 -0
- data/src/java/arjdbc/util/DateTimeUtils.java +580 -0
- data/src/java/arjdbc/util/ObjectSupport.java +65 -0
- data/src/java/arjdbc/util/QuotingUtils.java +138 -0
- data/src/java/arjdbc/util/StringCache.java +63 -0
- data/src/java/arjdbc/util/StringHelper.java +159 -0
- metadata +245 -268
- data/History.txt +0 -369
- data/Manifest.txt +0 -180
- data/README.txt +0 -181
- data/lib/active_record/connection_adapters/oracle_adapter.rb +0 -1
- data/lib/arel/engines/sql/compilers/db2_compiler.rb +0 -9
- data/lib/arel/engines/sql/compilers/derby_compiler.rb +0 -6
- data/lib/arel/engines/sql/compilers/h2_compiler.rb +0 -6
- data/lib/arel/engines/sql/compilers/hsqldb_compiler.rb +0 -15
- data/lib/arel/engines/sql/compilers/jdbc_compiler.rb +0 -6
- data/lib/arel/engines/sql/compilers/mssql_compiler.rb +0 -46
- data/lib/arel/visitors/mssql.rb +0 -44
- data/lib/arjdbc/jdbc/compatibility.rb +0 -51
- data/lib/arjdbc/jdbc/core_ext.rb +0 -24
- data/lib/arjdbc/jdbc/discover.rb +0 -18
- data/lib/arjdbc/jdbc/driver.rb +0 -44
- data/lib/arjdbc/jdbc/missing_functionality_helper.rb +0 -87
- data/lib/arjdbc/jdbc/quoted_primary_key.rb +0 -28
- data/lib/arjdbc/jdbc/require_driver.rb +0 -16
- data/lib/arjdbc/mimer.rb +0 -2
- data/lib/arjdbc/mimer/adapter.rb +0 -142
- data/lib/arjdbc/mssql/tsql_helper.rb +0 -61
- data/lib/arjdbc/oracle.rb +0 -3
- data/lib/arjdbc/oracle/connection_methods.rb +0 -11
- data/lib/pg.rb +0 -4
- data/rakelib/package.rake +0 -92
- data/rakelib/test.rake +0 -81
- data/src/java/arjdbc/jdbc/SQLBlock.java +0 -48
- data/src/java/arjdbc/mssql/MssqlRubyJdbcConnection.java +0 -127
- data/src/java/arjdbc/postgresql/PostgresqlRubyJdbcConnection.java +0 -57
- data/src/java/arjdbc/sqlite3/Sqlite3RubyJdbcConnection.java +0 -64
- data/test/abstract_db_create.rb +0 -117
- data/test/activerecord/connection_adapters/type_conversion_test.rb +0 -31
- data/test/activerecord/connections/native_jdbc_mysql/connection.rb +0 -25
- data/test/db/db2.rb +0 -11
- data/test/db/derby.rb +0 -12
- data/test/db/h2.rb +0 -11
- data/test/db/hsqldb.rb +0 -13
- data/test/db/informix.rb +0 -11
- data/test/db/jdbc.rb +0 -11
- data/test/db/jndi_config.rb +0 -40
- data/test/db/logger.rb +0 -3
- data/test/db/mssql.rb +0 -9
- data/test/db/mysql.rb +0 -10
- data/test/db/oracle.rb +0 -34
- data/test/db/postgres.rb +0 -9
- data/test/db/sqlite3.rb +0 -11
- data/test/db2_simple_test.rb +0 -66
- data/test/derby_migration_test.rb +0 -68
- data/test/derby_multibyte_test.rb +0 -12
- data/test/derby_simple_test.rb +0 -99
- data/test/generic_jdbc_connection_test.rb +0 -29
- data/test/h2_simple_test.rb +0 -41
- data/test/has_many_through.rb +0 -79
- data/test/helper.rb +0 -5
- data/test/hsqldb_simple_test.rb +0 -6
- data/test/informix_simple_test.rb +0 -48
- data/test/jdbc_common.rb +0 -25
- data/test/jndi_callbacks_test.rb +0 -40
- data/test/jndi_test.rb +0 -25
- data/test/manualTestDatabase.rb +0 -191
- data/test/models/add_not_null_column_to_table.rb +0 -12
- data/test/models/auto_id.rb +0 -18
- data/test/models/data_types.rb +0 -28
- data/test/models/entry.rb +0 -43
- data/test/models/mixed_case.rb +0 -25
- data/test/models/reserved_word.rb +0 -18
- data/test/models/string_id.rb +0 -18
- data/test/models/validates_uniqueness_of_string.rb +0 -19
- data/test/mssql_db_create_test.rb +0 -26
- data/test/mssql_identity_insert_test.rb +0 -19
- data/test/mssql_legacy_types_test.rb +0 -58
- data/test/mssql_limit_offset_test.rb +0 -136
- data/test/mssql_multibyte_test.rb +0 -18
- data/test/mssql_simple_test.rb +0 -55
- data/test/mysql_db_create_test.rb +0 -27
- data/test/mysql_info_test.rb +0 -113
- data/test/mysql_multibyte_test.rb +0 -10
- data/test/mysql_nonstandard_primary_key_test.rb +0 -42
- data/test/mysql_simple_test.rb +0 -49
- data/test/oracle_simple_test.rb +0 -18
- data/test/oracle_specific_test.rb +0 -83
- data/test/pick_rails_version.rb +0 -3
- data/test/postgres_db_create_test.rb +0 -32
- data/test/postgres_drop_db_test.rb +0 -16
- data/test/postgres_mixed_case_test.rb +0 -29
- data/test/postgres_nonseq_pkey_test.rb +0 -38
- data/test/postgres_reserved_test.rb +0 -22
- data/test/postgres_schema_search_path_test.rb +0 -44
- data/test/postgres_simple_test.rb +0 -51
- data/test/postgres_table_alias_length_test.rb +0 -15
- data/test/simple.rb +0 -546
- data/test/sqlite3_simple_test.rb +0 -233
- data/test/sybase_jtds_simple_test.rb +0 -28
data/LICENSE.txt
CHANGED
|
@@ -1,21 +1,26 @@
|
|
|
1
|
-
Copyright (c)
|
|
1
|
+
Copyright (c) 2017-2018 The JRuby Team
|
|
2
|
+
Copyright (c) 2012-2016 Karol Bucek <self@kares.org>
|
|
3
|
+
Copyright (c) 2006-2012 Nick Sieger <nick@nicksieger.com>
|
|
2
4
|
Copyright (c) 2006-2008 Ola Bini <ola.bini@gmail.com>
|
|
3
5
|
|
|
4
|
-
|
|
5
|
-
a copy of this software and associated documentation files (the
|
|
6
|
-
"Software"), to deal in the Software without restriction, including
|
|
7
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
|
9
|
-
permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
-
the following conditions:
|
|
6
|
+
All rights reserved.
|
|
11
7
|
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
Redistribution and use in source and binary forms, with or without modification,
|
|
9
|
+
are permitted provided that the following conditions are met:
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
11
|
+
- Redistributions of source code must retain the above copyright notice, this
|
|
12
|
+
list of conditions and the following disclaimer.
|
|
13
|
+
- Redistributions in binary form must reproduce the above copyright notice, this
|
|
14
|
+
list of conditions and the following disclaimer in the documentation and/or
|
|
15
|
+
other materials provided with the distribution.
|
|
16
|
+
|
|
17
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
18
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
19
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
20
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
|
21
|
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
22
|
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
23
|
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
24
|
+
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
25
|
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
26
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# ActiveRecord JDBC Adapter
|
|
2
|
+
|
|
3
|
+
[][7]
|
|
4
|
+
|
|
5
|
+
ActiveRecord-JDBC-Adapter (AR-JDBC) is the main database adapter for Rails'
|
|
6
|
+
*ActiveRecord* component that can be used with [JRuby][0].
|
|
7
|
+
ActiveRecord-JDBC-Adapter provides full or nearly full support for:
|
|
8
|
+
**MySQL**, **PostgreSQL**, **SQLite3**. In the near future there are plans to
|
|
9
|
+
add support **MSSQL**. Unless we get more contributions we will not be going
|
|
10
|
+
beyond these four adapters. Note that the amount of work needed to get
|
|
11
|
+
another adapter is not huge but the amount of testing required to make sure
|
|
12
|
+
that adapter continues to work is not something we can do with the resources
|
|
13
|
+
we currently have.
|
|
14
|
+
|
|
15
|
+
For Oracle database users you are encouraged to use
|
|
16
|
+
https://github.com/rsim/oracle-enhanced.
|
|
17
|
+
|
|
18
|
+
Version **50.x** supports Rails version 5.0.x and it lives on branch 50-stable.
|
|
19
|
+
Version **51.x** supports Rails version 5.1.x and is currently on master until
|
|
20
|
+
its first release. The minimum version of JRuby for 50+ is JRuby **9.1.x** and
|
|
21
|
+
JRuby 9.1+ requires Java 7 or newer (we recommend Java 8 at minimum).
|
|
22
|
+
|
|
23
|
+
## Using ActiveRecord JDBC
|
|
24
|
+
|
|
25
|
+
### Inside Rails
|
|
26
|
+
|
|
27
|
+
To use AR-JDBC with JRuby on Rails:
|
|
28
|
+
|
|
29
|
+
1. Choose the adapter you wish to gem install. The following pre-packaged
|
|
30
|
+
adapters are available:
|
|
31
|
+
|
|
32
|
+
- MySQL (`activerecord-jdbcmysql-adapter`)
|
|
33
|
+
- PostgreSQL (`activerecord-jdbcpostgresql-adapter`)
|
|
34
|
+
- SQLite3 (`activerecord-jdbcsqlite3-adapter`)
|
|
35
|
+
|
|
36
|
+
2. If you're generating a new Rails application, use the following command:
|
|
37
|
+
|
|
38
|
+
jruby -S rails new sweetapp
|
|
39
|
+
|
|
40
|
+
3. Configure your *database.yml* in the normal Rails style:
|
|
41
|
+
|
|
42
|
+
```yml
|
|
43
|
+
development:
|
|
44
|
+
adapter: mysql2 # or mysql
|
|
45
|
+
database: blog_development
|
|
46
|
+
username: blog
|
|
47
|
+
password: 1234
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
For JNDI data sources, you may simply specify the JNDI location as follows, it's
|
|
51
|
+
recommended to use the same adapter: setting as one would configure when using
|
|
52
|
+
"bare" (JDBC) connections e.g. :
|
|
53
|
+
|
|
54
|
+
```yml
|
|
55
|
+
production:
|
|
56
|
+
adapter: postgresql
|
|
57
|
+
jndi: jdbc/PostgreDS
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**NOTE:** any other settings such as *database:*, *username:*, *properties:* make
|
|
61
|
+
no difference since everything is already configured on the JNDI DataSource end.
|
|
62
|
+
|
|
63
|
+
JDBC driver specific properties might be set if you use an URL to specify the DB
|
|
64
|
+
or preferably using the *properties:* syntax:
|
|
65
|
+
|
|
66
|
+
```yml
|
|
67
|
+
production:
|
|
68
|
+
adapter: mysql
|
|
69
|
+
username: blog
|
|
70
|
+
password: blog
|
|
71
|
+
url: "jdbc:mysql://localhost:3306/blog?profileSQL=true"
|
|
72
|
+
properties: # specific to com.mysql.jdbc.Driver
|
|
73
|
+
socketTimeout: 60000
|
|
74
|
+
connectTimeout: 60000
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Standalone with ActiveRecord
|
|
78
|
+
|
|
79
|
+
Once the setup is made (see below) you can establish a JDBC connection like this
|
|
80
|
+
(e.g. for `activerecord-jdbcderby-adapter`):
|
|
81
|
+
|
|
82
|
+
```ruby
|
|
83
|
+
ActiveRecord::Base.establish_connection(
|
|
84
|
+
adapter: 'sqlite3',
|
|
85
|
+
database: 'db/my-database'
|
|
86
|
+
)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### Using Bundler
|
|
90
|
+
|
|
91
|
+
Proceed as with Rails; specify `ActiveRecord` in your Bundle along with the
|
|
92
|
+
chosen JDBC adapter(s), this time sample *Gemfile* for MySQL:
|
|
93
|
+
|
|
94
|
+
```ruby
|
|
95
|
+
gem 'activerecord', '~> 5.0.6'
|
|
96
|
+
gem 'activerecord-jdbcmysql-adapter', :platform => :jruby
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
When you `require 'bundler/setup'` everything will be set up for you as expected.
|
|
100
|
+
|
|
101
|
+
#### Without Bundler
|
|
102
|
+
|
|
103
|
+
Install the needed gems with JRuby, for example:
|
|
104
|
+
|
|
105
|
+
gem install activerecord -v "~> 5.0.6"
|
|
106
|
+
gem install activerecord-jdbc-adapter --ignore-dependencies
|
|
107
|
+
|
|
108
|
+
If you wish to use the adapter for a specific database, you can install it
|
|
109
|
+
directly and the (jdbc-) driver gem (dependency) will be installed as well:
|
|
110
|
+
|
|
111
|
+
jruby -S gem install activerecord-jdbcmysql-adapter
|
|
112
|
+
|
|
113
|
+
Your program should include:
|
|
114
|
+
|
|
115
|
+
```ruby
|
|
116
|
+
require 'active_record'
|
|
117
|
+
require 'activerecord-jdbc-adapter' if defined? JRUBY_VERSION
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Source
|
|
121
|
+
|
|
122
|
+
The source for activerecord-jdbc-adapter is available using git:
|
|
123
|
+
|
|
124
|
+
git clone git://github.com/jruby/activerecord-jdbc-adapter.git
|
|
125
|
+
|
|
126
|
+
Please note that the project manages multiple gems from a single repository,
|
|
127
|
+
if you're using *Bundler* >= 1.2 it should be able to locate all gemspecs from
|
|
128
|
+
the git repository. Sample *Gemfile* for running with (MySQL) master:
|
|
129
|
+
|
|
130
|
+
```ruby
|
|
131
|
+
gem 'activerecord-jdbc-adapter', :github => 'jruby/activerecord-jdbc-adapter'
|
|
132
|
+
gem 'activerecord-jdbcmysql-adapter', :github => 'jruby/activerecord-jdbc-adapter'
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Getting Involved
|
|
136
|
+
|
|
137
|
+
Please read our [CONTRIBUTING](CONTRIBUTING.md) & [RUNNING_TESTS](RUNNING_TESTS.md)
|
|
138
|
+
guides for starters. You can always help us by maintaining AR-JDBC's [wiki][5].
|
|
139
|
+
|
|
140
|
+
## Feedback
|
|
141
|
+
|
|
142
|
+
Please report bugs at our [issue tracker][3]. If you're not sure if
|
|
143
|
+
something's a bug, feel free to pre-report it on the [mailing lists][1] or
|
|
144
|
+
ask on the #JRuby IRC channel on http://freenode.net/ (try [web-chat][6]).
|
|
145
|
+
|
|
146
|
+
## Authors
|
|
147
|
+
|
|
148
|
+
This project was originally written by [Nick Sieger](http://github.com/nicksieger)
|
|
149
|
+
and [Ola Bini](http://github.com/olabini) with lots of help from the JRuby community.
|
|
150
|
+
Polished 3.x compatibility and 4.x support (for AR-JDBC >= 1.3.0) was managed by
|
|
151
|
+
[Karol Bucek](http://github.com/kares) among others.
|
|
152
|
+
|
|
153
|
+
## License
|
|
154
|
+
|
|
155
|
+
ActiveRecord-JDBC-Adapter is open-source released under the BSD/MIT license.
|
|
156
|
+
See [LICENSE.txt](LICENSE.txt) included with the distribution for details.
|
|
157
|
+
|
|
158
|
+
Open-source driver gems within AR-JDBC's sources are licensed under the same
|
|
159
|
+
license the database's drivers are licensed. See each driver gem's LICENSE.txt.
|
|
160
|
+
|
|
161
|
+
[0]: http://www.jruby.org/
|
|
162
|
+
[1]: http://jruby.org/community
|
|
163
|
+
[2]: http://github.com/jruby/activerecord-jdbc-adapter/blob/master/activerecord-jdbcmssql-adapter
|
|
164
|
+
[3]: https://github.com/jruby/activerecord-jdbc-adapter/issues
|
|
165
|
+
[4]: http://github.com/nicksieger/activerecord-cachedb-adapter
|
|
166
|
+
[5]: https://github.com/jruby/activerecord-jdbc-adapter/wiki
|
|
167
|
+
[6]: https://webchat.freenode.net/?channels=#jruby
|
|
168
|
+
[7]: http://badge.fury.io/rb/activerecord-jdbc-adapter
|
|
169
|
+
[8]: https://github.com/jruby/activerecord-jdbc-adapter/wiki/Migrating-from-1.2.x-to-1.3.0
|
data/RUNNING_TESTS.md
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
There are two sets of tests which we run in CI. Local (AR-JDBC) test and
|
|
2
|
+
Rails activerecord tests. The next two sections details how to run each
|
|
3
|
+
and customize behavior.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## Running AR-JDBC's Tests
|
|
7
|
+
|
|
8
|
+
After you have built arjdbc (run rake), then you can try testing it (if you
|
|
9
|
+
do not build then adapter_java.jar is not put into the lib dir). If you
|
|
10
|
+
change any of the .java files you will need to rebuild.
|
|
11
|
+
|
|
12
|
+
Most DB specific unit tests hide under the **test/db** directory, the files
|
|
13
|
+
included in the *test* directory are mostly shared test modules and helpers.
|
|
14
|
+
|
|
15
|
+
Rake tasks are loaded from **rakelib/02-test-rake**, most adapters have a
|
|
16
|
+
corresponding test_[adapter] task e.g. `rake test_sqlite3` that run against DB.
|
|
17
|
+
To check all available (test related) tasks simply `rake -T | grep test`.
|
|
18
|
+
|
|
19
|
+
If the adapter supports creating a database it will try to do so automatically
|
|
20
|
+
(most embed databases such as SQLite3) for some adapters (MySQL, PostgreSQL) we
|
|
21
|
+
do this auto-magically (see the `rake db:create` tasks), but otherwise you'll
|
|
22
|
+
need to setup a database dedicated for tests (using the standard tools that come
|
|
23
|
+
with your DB installation).
|
|
24
|
+
|
|
25
|
+
Connection parameters: database, host etc. can usually be changed from the shell
|
|
26
|
+
`env` for adapters where there might be no direct control over the DB
|
|
27
|
+
instance/configuration, e.g. for Oracle (by looking at **test/db/oracle.rb**)
|
|
28
|
+
one might adapt the test database configuration using :
|
|
29
|
+
```
|
|
30
|
+
export ORACLE_HOST=192.168.1.2
|
|
31
|
+
export ORACLE_USER=SAMPLE
|
|
32
|
+
export ORACLE_PASS=sample
|
|
33
|
+
export ORACLE_SID=MAIN
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Tests are run by calling the rake task corresponding the database adapter being
|
|
37
|
+
tested, e.g. for MySQL :
|
|
38
|
+
|
|
39
|
+
rake test_mysql TEST=test/db/mysql/rake_test.rb
|
|
40
|
+
|
|
41
|
+
Observe the **TEST** variable used to specify a single file to be used to resolve
|
|
42
|
+
test cases, you pick tests by matching their names as well using **TESTOPTS** :
|
|
43
|
+
|
|
44
|
+
rake test_postgres TESTOPTS="--name=/integer/"
|
|
45
|
+
|
|
46
|
+
Since 1.3.0 we also support prepared statements, these are enabled by default (AR)
|
|
47
|
+
but one can easily run tests with prepared statements disabled using env vars :
|
|
48
|
+
|
|
49
|
+
rake test_derby PREPARED_STATEMENTS=false
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
### ActiveRecord (Rails) Tests
|
|
53
|
+
|
|
54
|
+
We also can run our adapters against Rails ActiveRecord tests. There are two
|
|
55
|
+
ways you can do this:
|
|
56
|
+
|
|
57
|
+
- Run against local clone (by setting RAILS environment variable). This is helpful when you are adding puts or hacking on activerecord code directly.
|
|
58
|
+
|
|
59
|
+
- Run against bundler provided clone (by setting AR_VERSION environment variable). This is useful when you want to submit to travis and want all the adapters to run against your code.
|
|
60
|
+
|
|
61
|
+
Note: RAILS will trump AR_VERSION and setting neither will assume version as
|
|
62
|
+
set in the gemspec.
|
|
63
|
+
|
|
64
|
+
### Run against local clone
|
|
65
|
+
|
|
66
|
+
Make sure you have rails cloned somewhere:
|
|
67
|
+
|
|
68
|
+
```text
|
|
69
|
+
git clone git://github.com/rails/rails.git
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Set up a fully qualified RAILS environment variable. For example, if you were
|
|
73
|
+
in activerecord direction you can just do something like:
|
|
74
|
+
|
|
75
|
+
```ext
|
|
76
|
+
export RAILS=`pwd`/../rails
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Now that is this set up we may have changed the gems we need so we have
|
|
80
|
+
to run bundler:
|
|
81
|
+
|
|
82
|
+
```text
|
|
83
|
+
bundle install
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Before you run tests you need to be aware that each support branch we have is
|
|
87
|
+
written to run with a single significant release of rails (50-stable will only
|
|
88
|
+
work well with rails 5.0.x). So you need to make sure you local copy of rails
|
|
89
|
+
is checked out to match whatever you are testing (e.g. git checkout v5.0.6).
|
|
90
|
+
Now you can run rails tests:
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
jruby -S rake rails:test_sqlite3
|
|
94
|
+
jruby -S rake rails:test_postgres
|
|
95
|
+
jruby -S rake rails:test_mysql
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Run against bundler provided clone
|
|
99
|
+
|
|
100
|
+
AR_VERSION is a very flexible variable. You can:
|
|
101
|
+
|
|
102
|
+
- specify tag (export AR_VERSION=v5.0.6)
|
|
103
|
+
- specify version (export AR_VERSION=5.0.6)
|
|
104
|
+
- specify SHA hash (export AR_VERSION=875bb788f56311ac4628402667187f755c1a331c)
|
|
105
|
+
- specify branch (export AR_VERSION=verify-release)
|
|
106
|
+
- specify nothing to assume LOADPATH has loaded it (export AR_VERSION=false)
|
|
107
|
+
|
|
108
|
+
Now that is this set up we may have changed the gems we need so we have
|
|
109
|
+
to run bundler:
|
|
110
|
+
|
|
111
|
+
```text
|
|
112
|
+
bundle install
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Once you have picked what you want to test you can run:
|
|
116
|
+
|
|
117
|
+
```text
|
|
118
|
+
jruby -S rake rails:test_sqlite3
|
|
119
|
+
jruby -S rake rails:test_postgres
|
|
120
|
+
jruby -S rake rails:test_mysql
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
[![Build Status][0]](http://travis-ci.org/#!/jruby/activerecord-jdbc-adapter)
|
|
124
|
+
|
|
125
|
+
Happy Testing!
|
|
126
|
+
|
|
127
|
+
[0]: https://secure.travis-ci.org/jruby/activerecord-jdbc-adapter.png
|
data/Rakefile
CHANGED
|
@@ -1,10 +1,299 @@
|
|
|
1
|
-
require 'rake/testtask'
|
|
2
1
|
require 'rake/clean'
|
|
3
|
-
CLEAN.include 'derby*', 'test.db.*','test/reports', 'test.sqlite3','lib/**/*.jar','manifest.mf', '*.log'
|
|
4
2
|
|
|
5
|
-
|
|
3
|
+
CLEAN.include 'derby*', 'test.db.*', '*test.sqlite3', 'test/reports'
|
|
4
|
+
CLEAN.include 'lib/**/*.jar', 'MANIFEST.MF', '*.log', 'target/*'
|
|
5
|
+
|
|
6
|
+
task :default => :jar # RubyGems extention will do a bare `rake' e.g. :
|
|
7
|
+
# jruby" -rubygems /opt/local/rvm/gems/jruby-1.7.16@jdbc/gems/rake-10.3.2/bin/rake
|
|
8
|
+
# RUBYARCHDIR=/opt/local/rvm/gems/jruby-1.7.16@jdbc/gems/activerecord-jdbc-adapter-1.4.0.dev/lib
|
|
9
|
+
# RUBYLIBDIR=/opt/local/rvm/gems/jruby-1.7.16@jdbc/gems/activerecord-jdbc-adapter-1.4.0.dev/lib
|
|
10
|
+
#
|
|
11
|
+
# under Bundler it points those DIRs to an empty one where only built extensions are stored :
|
|
12
|
+
# jruby -rubygems /opt/local/rvm/gems/jruby-1.7.19@temp/gems/rake-10.4.2/bin/rake
|
|
13
|
+
# RUBYARCHDIR=/opt/local/rvm/gems/jruby-1.7.19@temp/bundler/gems/extensions/universal-java-1.7/1.9/activerecord-jdbc-adapter-472b5fddba43
|
|
14
|
+
# RUBYLIBDIR=/opt/local/rvm/gems/jruby-1.7.19@temp/bundler/gems/extensions/universal-java-1.7/1.9/activerecord-jdbc-adapter-472b5fddba43
|
|
15
|
+
#
|
|
16
|
+
# javac -target 1.6 -source 1.6 -Xlint:unchecked -g -cp
|
|
17
|
+
# "/opt/local/rvm/rubies/jruby-1.7.19/lib/jruby.jar:
|
|
18
|
+
# /opt/local/maven-repo/mysql/mysql-connector-java/5.1.33/mysql-connector-java-5.1.33.jar:
|
|
19
|
+
# /opt/local/maven-repo/org/postgresql/postgresql/9.4-1200-jdbc4/postgresql-9.4-1200-jdbc4.jar"
|
|
20
|
+
# -d /tmp/d20150417-32100-7mb1bk src/java/arjdbc/ArJdbcModule.java ...
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
base_dir = Dir.pwd
|
|
24
|
+
gem_name = 'activerecord-jdbc-adapter'
|
|
25
|
+
gemspec_path = File.expand_path('activerecord-jdbc-adapter.gemspec', File.dirname(__FILE__))
|
|
26
|
+
gemspec = lambda do
|
|
27
|
+
@_gemspec_ ||= Dir.chdir(File.dirname(__FILE__)) do
|
|
28
|
+
Gem::Specification.load(gemspec_path)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
built_gem_path = lambda do
|
|
32
|
+
Dir[File.join(base_dir, "#{gem_name}-*.gem")].sort_by{ |f| File.mtime(f) }.last
|
|
33
|
+
end
|
|
34
|
+
current_version = lambda { gemspec.call.version }
|
|
35
|
+
rake = lambda { |task| ruby "-S", "rake", task }
|
|
36
|
+
|
|
37
|
+
# NOTE: avoid Bundler loading due native extension building!
|
|
38
|
+
|
|
39
|
+
desc "Build #{gem_name} gem into the pkg directory."
|
|
40
|
+
task :build => :jar do
|
|
41
|
+
sh("RELEASE=#{ENV['RELEASE']} gem build -V '#{gemspec_path}'") do
|
|
42
|
+
gem_path = built_gem_path.call
|
|
43
|
+
file_name = File.basename(gem_path)
|
|
44
|
+
FileUtils.mkdir_p(File.join(base_dir, 'pkg'))
|
|
45
|
+
FileUtils.mv(gem_path, 'pkg')
|
|
46
|
+
puts "\n#{gem_name} #{current_version.call} built to 'pkg/#{file_name}'"
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
desc "Build and install #{gem_name} gem into system gems."
|
|
51
|
+
task :install => :build do
|
|
52
|
+
gem_path = built_gem_path.call
|
|
53
|
+
sh("gem install '#{gem_path}' --local") do |ok|
|
|
54
|
+
raise "Couldn't install gem, run `gem install #{gem_path}' for more detailed output" unless ok
|
|
55
|
+
puts "\n#{gem_name} (#{current_version.call}) installed"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
desc "Releasing AR-JDBC gems (use NOOP=true to disable gem pushing)"
|
|
60
|
+
task 'release:do' do
|
|
61
|
+
ENV['RELEASE'] = 'true' # so that .gemspec is built with adapter_java.jar
|
|
62
|
+
Rake::Task['build'].invoke
|
|
63
|
+
Rake::Task['build:adapters'].invoke
|
|
64
|
+
|
|
65
|
+
noop = ENV.key?('NOOP') && (ENV['NOOP'] != 'false' && ENV['NOOP'] != '')
|
|
66
|
+
|
|
67
|
+
version = current_version.call; version_tag = "v#{version}"
|
|
6
68
|
|
|
7
|
-
|
|
8
|
-
|
|
69
|
+
sh("git diff --no-patch --exit-code", :noop => noop) { |ok| fail "git working dir is not clean" unless ok }
|
|
70
|
+
sh("git diff-index --quiet --cached HEAD", :noop => noop) { |ok| fail "git index is not clean" unless ok }
|
|
71
|
+
|
|
72
|
+
sh "git tag -a -m \"AR-JDBC #{version}\" #{version_tag}", :noop => noop
|
|
73
|
+
branch = `git rev-parse --abbrev-ref HEAD`.strip
|
|
74
|
+
puts "releasing from (current) branch #{branch.inspect}"
|
|
75
|
+
sh "for gem in `ls pkg/*-#{version}-java.gem`; do gem push $gem; done", :noop => noop do |ok|
|
|
76
|
+
sh "git push origin #{branch} --tags", :noop => noop if ok
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
task 'release:push' do
|
|
81
|
+
sh "for gem in `ls pkg/*-#{current_version.call}-java.gem`; do gem push $gem; done"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
ADAPTERS = %w[mysql postgresql sqlite3].map { |a| "activerecord-jdbc#{a}-adapter" }
|
|
85
|
+
DRIVERS = %w[mysql postgres sqlite3].map { |a| "jdbc-#{a}" }
|
|
86
|
+
TARGETS = ( ADAPTERS + DRIVERS )
|
|
87
|
+
|
|
88
|
+
ADAPTERS.each do |target|
|
|
89
|
+
namespace target do
|
|
90
|
+
task :build do
|
|
91
|
+
version = current_version.call
|
|
92
|
+
Dir.chdir(target) { rake.call "build" }
|
|
93
|
+
cp FileList["#{target}/pkg/#{target}-#{version}-java.gem"], "pkg"
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
DRIVERS.each do |target|
|
|
98
|
+
namespace target do
|
|
99
|
+
task :build do
|
|
100
|
+
Dir.chdir(target) { rake.call "build" }
|
|
101
|
+
cp FileList["#{target}/pkg/#{target}-*.gem"], "pkg"
|
|
102
|
+
end
|
|
103
|
+
end
|
|
9
104
|
end
|
|
105
|
+
TARGETS.each do |target|
|
|
106
|
+
namespace target do
|
|
107
|
+
task :install do
|
|
108
|
+
Dir.chdir(target) { rake.call "install" }
|
|
109
|
+
end
|
|
110
|
+
#task :release do
|
|
111
|
+
# Dir.chdir(target) { rake.call "release" }
|
|
112
|
+
#end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# DRIVERS
|
|
117
|
+
|
|
118
|
+
desc "Build drivers"
|
|
119
|
+
task "build:drivers" => DRIVERS.map { |name| "#{name}:build" }
|
|
120
|
+
task "drivers:build" => 'build:drivers'
|
|
121
|
+
|
|
122
|
+
desc "Install drivers"
|
|
123
|
+
task "install:drivers" => DRIVERS.map { |name| "#{name}:install" }
|
|
124
|
+
task "drivers:install" => 'install:drivers'
|
|
125
|
+
|
|
126
|
+
# ADAPTERS
|
|
127
|
+
|
|
128
|
+
desc "Build adapters"
|
|
129
|
+
task "build:adapters" => [ 'build' ] + ADAPTERS.map { |name| "#{name}:build" }
|
|
130
|
+
task "adapters:build" => 'build:adapters'
|
|
131
|
+
|
|
132
|
+
desc "Install adapters"
|
|
133
|
+
task "install:adapters" => [ 'install' ] + ADAPTERS.map { |name| "#{name}:install" }
|
|
134
|
+
task "adapters:install" => 'install:adapters'
|
|
10
135
|
|
|
136
|
+
# ALL
|
|
137
|
+
|
|
138
|
+
task "build:all" => [ 'build' ] + TARGETS.map { |name| "#{name}:build" }
|
|
139
|
+
task "all:build" => 'build:all'
|
|
140
|
+
task "install:all" => [ 'install' ] + TARGETS.map { |name| "#{name}:install" }
|
|
141
|
+
task "all:install" => 'install:all'
|
|
142
|
+
|
|
143
|
+
require 'rake/testtask'
|
|
144
|
+
|
|
145
|
+
# native JRuby extension (adapter_java.jar) compilation :
|
|
146
|
+
|
|
147
|
+
if defined? JRUBY_VERSION
|
|
148
|
+
jar_file = 'lib/arjdbc/jdbc/adapter_java.jar'; CLEAN << jar_file
|
|
149
|
+
desc "Compile the native (Java) extension."
|
|
150
|
+
task :jar => jar_file
|
|
151
|
+
|
|
152
|
+
namespace :jar do
|
|
153
|
+
task :force do
|
|
154
|
+
rm jar_file if File.exist?(jar_file)
|
|
155
|
+
Rake::Task['jar'].invoke
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
#directory classes = 'pkg/classes'; CLEAN << classes
|
|
160
|
+
|
|
161
|
+
file jar_file => FileList[ 'src/java/**/*.java' ] do
|
|
162
|
+
source = target = '1.7'; debug = true
|
|
163
|
+
|
|
164
|
+
get_driver_jars_local = lambda do |*args|
|
|
165
|
+
driver_deps = args.empty? ? [ :Postgres, :MySQL ] : args
|
|
166
|
+
driver_jars = []
|
|
167
|
+
driver_deps.each do |name|
|
|
168
|
+
driver_jars << Dir.glob("jdbc-#{name.to_s.downcase}/lib/*.jar").sort.last
|
|
169
|
+
end
|
|
170
|
+
if driver_jars.empty? # likely on a `gem install ...'
|
|
171
|
+
# NOTE: we're currently assuming jdbc-xxx (compile) dependencies are
|
|
172
|
+
# installed, they are declared as gemspec.development_dependencies !
|
|
173
|
+
# ... the other option is to simply `mvn prepare-package'
|
|
174
|
+
driver_deps.each do |name|
|
|
175
|
+
#require "jdbc/#{name.to_s.downcase}"
|
|
176
|
+
#driver_jars << Jdbc.const_get(name).driver_jar
|
|
177
|
+
# thanks Bundler for mocking RubyGems completely :
|
|
178
|
+
#spec = Gem::Specification.find_by_name("jdbc-#{name.to_s.downcase}")
|
|
179
|
+
#driver_jars << Dir.glob(File.join(spec.gem_dir, 'lib/*.jar')).sort.last
|
|
180
|
+
gem_name = "jdbc-#{name.to_s.downcase}"; matched_gem_paths = []
|
|
181
|
+
Gem.paths.path.each do |path|
|
|
182
|
+
base_path = File.join(path, "gems/")
|
|
183
|
+
Dir.glob(File.join(base_path, "*")).each do |gem_path|
|
|
184
|
+
if gem_path.sub(base_path, '').start_with?(gem_name)
|
|
185
|
+
matched_gem_paths << gem_path
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
if gem_path = matched_gem_paths.sort.last
|
|
190
|
+
driver_jars << Dir.glob(File.join(gem_path, 'lib/*.jar')).sort.last
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
driver_jars
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
get_driver_jars_maven = lambda do
|
|
198
|
+
require 'jar_dependencies'
|
|
199
|
+
|
|
200
|
+
requirements = gemspec.call.requirements
|
|
201
|
+
match_driver_jars = lambda do
|
|
202
|
+
matched_jars = []
|
|
203
|
+
gemspec.call.requirements.each do |requirement|
|
|
204
|
+
if match = requirement.match(/^jar\s+([\w\-\.]+):([\w\-]+),\s+?([\w\.\-]+)?/)
|
|
205
|
+
matched_jar = Jars.send :to_jar, match[1], match[2], match[3], nil
|
|
206
|
+
matched_jar = File.join( Jars.home, matched_jar )
|
|
207
|
+
matched_jars << matched_jar if File.exists?( matched_jar )
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
matched_jars
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
driver_jars = match_driver_jars.call
|
|
214
|
+
if driver_jars.size < requirements.size
|
|
215
|
+
if (ENV['JARS_SKIP'] || ENV_JAVA['jars.skip']) == 'true'
|
|
216
|
+
warn "jar resolving skipped, extension might not compile"
|
|
217
|
+
else
|
|
218
|
+
require 'jars/installer'
|
|
219
|
+
ENV['JARS_QUIET'] = 'true'
|
|
220
|
+
puts "resolving jar dependencies to build extension (should only happen once) ..."
|
|
221
|
+
installer = Jars::Installer.new( gemspec_path )
|
|
222
|
+
installer.install_jars( false )
|
|
223
|
+
|
|
224
|
+
driver_jars = match_driver_jars.call
|
|
225
|
+
end
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
driver_jars
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# TODO not good but since jar-dependencies doesn't do the job, let's default to local (for now)
|
|
232
|
+
if ENV['BUILD_EXT_MAVEN'] == 'true' # || ENV['RUBYARCHDIR']
|
|
233
|
+
driver_jars = get_driver_jars_maven.call
|
|
234
|
+
else
|
|
235
|
+
driver_jars = get_driver_jars_local.call
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
classpath = []
|
|
239
|
+
[ 'java.class.path', 'sun.boot.class.path' ].each do |key|
|
|
240
|
+
classpath += ENV_JAVA[key].split(File::PATH_SEPARATOR).find_all { |jar| jar =~ /jruby/i }
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
#classpath += ENV_JAVA['java.class.path'].split(File::PATH_SEPARATOR)
|
|
244
|
+
#classpath += ENV_JAVA['sun.boot.class.path'].split(File::PATH_SEPARATOR)
|
|
245
|
+
|
|
246
|
+
classpath += driver_jars
|
|
247
|
+
classpath = classpath.compact.join(File::PATH_SEPARATOR)
|
|
248
|
+
|
|
249
|
+
source_files = FileList[ 'src/java/**/*.java' ]
|
|
250
|
+
|
|
251
|
+
require 'tmpdir'
|
|
252
|
+
|
|
253
|
+
Dir.mktmpdir do |classes_dir|
|
|
254
|
+
# Cross-platform way of finding an executable in the $PATH.
|
|
255
|
+
# Thanks to @mislav
|
|
256
|
+
which = lambda do |cmd|
|
|
257
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
|
258
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).map do |path|
|
|
259
|
+
exts.map { |ext| File.join(path, "#{cmd}#{ext}") }
|
|
260
|
+
end.flatten.select{|f| File.executable? f}.first
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
args = [ '-Xlint:unchecked' ]
|
|
264
|
+
|
|
265
|
+
unless javac = which.call('javac')
|
|
266
|
+
warn "could not find javac, please make sure it's on the PATH"
|
|
267
|
+
end
|
|
268
|
+
javac = "#{javac} -target #{target} -source #{source} #{args.join(' ')}"
|
|
269
|
+
javac << " #{debug ? '-g' : ''}"
|
|
270
|
+
javac << " -cp \"#{classpath}\" -d #{classes_dir} #{source_files.join(' ')}"
|
|
271
|
+
sh(javac) do |ok|
|
|
272
|
+
raise 'could not build .jar extension - compilation failure' unless ok
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# class_files = FileList["#{classes_dir}/**/*.class"].gsub("#{classes_dir}/", '')
|
|
276
|
+
# avoid environment variable expansion using backslash
|
|
277
|
+
# class_files.gsub!('$', '\$') unless windows?
|
|
278
|
+
# args = class_files.map { |path| [ "-C #{classes_dir}", path ] }.flatten
|
|
279
|
+
args = [ '-C', "#{classes_dir}/ ." ] # args = class_files
|
|
280
|
+
|
|
281
|
+
jar_path = jar_file
|
|
282
|
+
if ext_lib_dir = ENV['RUBYLIBDIR']
|
|
283
|
+
jar_path = File.join(ext_lib_dir, File.basename(jar_file))
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
unless jar = which.call('jar')
|
|
287
|
+
warn "could not find jar tool, please make sure it's on the PATH"
|
|
288
|
+
end
|
|
289
|
+
sh("#{jar} cf #{jar_path} #{args.join(' ')}") do |ok|
|
|
290
|
+
raise 'could not build .jar extension - packaging failure' unless ok
|
|
291
|
+
end
|
|
292
|
+
cp jar_path, jar_file if ext_lib_dir # NOTE: hopefully RG won't mind?!
|
|
293
|
+
end
|
|
294
|
+
end
|
|
295
|
+
else
|
|
296
|
+
task :jar do
|
|
297
|
+
puts "please run `rake jar' under JRuby to re-compile the native (Java) extension"
|
|
298
|
+
end
|
|
299
|
+
end
|