activerecord-jdbc-adapter 1.3.0.rc1 → 1.3.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 (57) hide show
  1. data/CONTRIBUTING.md +3 -5
  2. data/Gemfile +3 -5
  3. data/Gemfile.lock +1 -1
  4. data/History.md +30 -3
  5. data/README.md +14 -9
  6. data/gemfiles/rails23.gemfile +3 -0
  7. data/gemfiles/rails23.gemfile.lock +8 -0
  8. data/gemfiles/rails30.gemfile +3 -0
  9. data/gemfiles/rails30.gemfile.lock +11 -0
  10. data/gemfiles/rails31.gemfile +3 -0
  11. data/gemfiles/rails31.gemfile.lock +8 -0
  12. data/gemfiles/rails32.gemfile +3 -0
  13. data/gemfiles/rails32.gemfile.lock +11 -0
  14. data/gemfiles/rails40.gemfile +3 -0
  15. data/gemfiles/rails40.gemfile.lock +6 -0
  16. data/lib/arjdbc/db2/adapter.rb +39 -23
  17. data/lib/arjdbc/db2/column.rb +3 -3
  18. data/lib/arjdbc/derby/adapter.rb +45 -0
  19. data/lib/arjdbc/firebird/adapter.rb +38 -36
  20. data/lib/arjdbc/h2/adapter.rb +1 -1
  21. data/lib/arjdbc/hsqldb/adapter.rb +1 -0
  22. data/lib/arjdbc/hsqldb/explain_support.rb +6 -6
  23. data/lib/arjdbc/jdbc/adapter.rb +80 -39
  24. data/lib/arjdbc/jdbc/adapter_java.jar +0 -0
  25. data/lib/arjdbc/jdbc/serialized_attributes_helper.rb +3 -21
  26. data/lib/arjdbc/mssql/adapter.rb +41 -18
  27. data/lib/arjdbc/mssql/column.rb +3 -8
  28. data/lib/arjdbc/mssql/explain_support.rb +1 -1
  29. data/lib/arjdbc/mysql/adapter.rb +19 -9
  30. data/lib/arjdbc/mysql/column.rb +1 -1
  31. data/lib/arjdbc/mysql/connection_methods.rb +1 -0
  32. data/lib/arjdbc/mysql/explain_support.rb +2 -1
  33. data/lib/arjdbc/oracle/adapter.rb +42 -26
  34. data/lib/arjdbc/oracle/column.rb +1 -1
  35. data/lib/arjdbc/postgresql/adapter.rb +13 -4
  36. data/lib/arjdbc/sqlite3/adapter.rb +2 -0
  37. data/lib/arjdbc/tasks/oracle/enhanced_structure_dump.rb +5 -5
  38. data/lib/arjdbc/util/serialized_attributes.rb +87 -0
  39. data/lib/arjdbc/version.rb +1 -1
  40. data/rakelib/02-test.rake +1 -1
  41. data/rakelib/db.rake +1 -1
  42. data/src/java/arjdbc/db2/DB2RubyJdbcConnection.java +2 -2
  43. data/src/java/arjdbc/derby/DerbyModule.java +26 -173
  44. data/src/java/arjdbc/h2/H2Module.java +1 -0
  45. data/src/java/arjdbc/h2/H2RubyJdbcConnection.java +1 -2
  46. data/src/java/arjdbc/hsqldb/HSQLDBModule.java +10 -9
  47. data/src/java/arjdbc/jdbc/AdapterJavaService.java +3 -3
  48. data/src/java/arjdbc/jdbc/JdbcConnectionFactory.java +4 -3
  49. data/src/java/arjdbc/jdbc/RubyJdbcConnection.java +189 -70
  50. data/src/java/arjdbc/jdbc/SQLBlock.java +4 -4
  51. data/src/java/arjdbc/mssql/MSSQLRubyJdbcConnection.java +6 -7
  52. data/src/java/arjdbc/mysql/MySQLModule.java +1 -0
  53. data/src/java/arjdbc/mysql/MySQLRubyJdbcConnection.java +14 -9
  54. data/src/java/arjdbc/oracle/OracleRubyJdbcConnection.java +19 -3
  55. data/src/java/arjdbc/postgresql/PostgreSQLRubyJdbcConnection.java +305 -11
  56. data/src/java/arjdbc/sqlite3/SQLite3RubyJdbcConnection.java +3 -3
  57. metadata +6 -5
@@ -44,15 +44,15 @@ module ActiveRecord #:nodoc:
44
44
 
45
45
  def structure_dump_column(column) #:nodoc:
46
46
  col = "\"#{column['column_name']}\" #{column['data_type']}"
47
- if column['data_type'] =='NUMBER' and !column['data_precision'].nil?
47
+ if column['data_type'] =='NUMBER' && ! column['data_precision'].blank?
48
48
  col << "(#{column['data_precision'].to_i}"
49
- col << ",#{column['data_scale'].to_i}" if !column['data_scale'].nil?
49
+ col << ",#{column['data_scale'].to_i}" unless column['data_scale'].blank?
50
50
  col << ')'
51
51
  elsif column['data_type'].include?('CHAR')
52
52
  length = column['char_used'] == 'C' ? column['char_length'].to_i : column['data_length'].to_i
53
53
  col << "(#{length})"
54
54
  end
55
- col << " DEFAULT #{column['data_default']}" if !column['data_default'].nil?
55
+ col << " DEFAULT #{column['data_default']}" unless column['data_default'].blank?
56
56
  col << ' NOT NULL' if column['nullable'] == 'N'
57
57
  col
58
58
  end
@@ -60,9 +60,9 @@ module ActiveRecord #:nodoc:
60
60
  def structure_dump_virtual_column(column, data_default) #:nodoc:
61
61
  data_default = data_default.gsub(/"/, '')
62
62
  col = "\"#{column['column_name']}\" #{column['data_type']}"
63
- if column['data_type'] =='NUMBER' and !column['data_precision'].nil?
63
+ if column['data_type'] =='NUMBER' && ! column['data_precision'].blank?
64
64
  col << "(#{column['data_precision'].to_i}"
65
- col << ",#{column['data_scale'].to_i}" if !column['data_scale'].nil?
65
+ col << ",#{column['data_scale'].to_i}" unless column['data_scale'].blank?
66
66
  col << ')'
67
67
  elsif column['data_type'].include?('CHAR')
68
68
  length = column['char_used'] == 'C' ? column['char_length'].to_i : column['data_length'].to_i
@@ -0,0 +1,87 @@
1
+ module ArJdbc
2
+ module Util
3
+ # Gets included into `ActiveRecord::Base` to support sending LOB values
4
+ # in a separate update SQL statement for DB adapters that need this.
5
+ module SerializedAttributes
6
+
7
+ # protected
8
+
9
+ def update_lob_columns
10
+ klass = self.class
11
+ return unless type = klass.lob_type # e.g. /blob/i
12
+ connection = klass.connection
13
+ if connection.respond_to?(:update_lob_values?)
14
+ return false unless connection.update_lob_values?
15
+ end
16
+ klass.columns.each do |column|
17
+ next if column.sql_type !~ type
18
+ next if ( value = dump_column_value(column) ).nil?
19
+ if connection.respond_to?(:update_lob_value?)
20
+ next unless connection.update_lob_value?(value, column)
21
+ end
22
+ connection.update_lob_value(self, column, value)
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def dump_column_value(column)
29
+ SerializedAttributes.dump_column_value(self, column)
30
+ end
31
+
32
+ def self.dump_column_value(record, column)
33
+ value = record[ name = column.name.to_s ]
34
+ if record.class.respond_to?(:serialized_attributes)
35
+ if coder = record.class.serialized_attributes[name]
36
+ value = coder.respond_to?(:dump) ? coder.dump(value) : value.to_yaml
37
+ end
38
+ else
39
+ if record.respond_to?(:unserializable_attribute?)
40
+ value = value.to_yaml if record.unserializable_attribute?(name, column)
41
+ else
42
+ value = value.to_yaml if value.is_a?(Hash)
43
+ end
44
+ end
45
+ value
46
+ end
47
+
48
+ def self.setup(lob_type = nil, after_save_alias = nil)
49
+ ActiveRecord::Base.send :include, self # include SerializedAttributes
50
+ ActiveRecord::Base.lob_type = lob_type unless lob_type.nil?
51
+ if after_save_alias
52
+ ActiveRecord::Base.class_eval do
53
+ alias_method after_save_alias, 'update_lob_columns'
54
+ end
55
+ ActiveRecord::Base.after_save after_save_alias
56
+ else
57
+ ActiveRecord::Base.after_save 'update_lob_columns'
58
+ end
59
+ end
60
+
61
+ def self.included(base)
62
+ base.extend ClassMethods
63
+ end
64
+
65
+ module ClassMethods
66
+
67
+ def lob_type
68
+ @lob_type ||= begin
69
+ if superclass.respond_to?(:lob_type)
70
+ superclass.lob_type
71
+ else
72
+ /blob|clob/i
73
+ end
74
+ end
75
+ end
76
+
77
+ def lob_type=(type)
78
+ @lob_type = type
79
+ end
80
+
81
+ end
82
+
83
+ end
84
+ end
85
+ # @private only due backwards compatibility
86
+ SerializedAttributesHelper = Util::SerializedAttributes
87
+ end
@@ -1,5 +1,5 @@
1
1
  module ArJdbc
2
- VERSION = "1.3.0.rc1"
2
+ VERSION = "1.3.0"
3
3
  # @deprecated
4
4
  module Version
5
5
  # @private 1.2.x compatibility
@@ -82,7 +82,7 @@ test_task_for :PostgreSQL, :prereqs => 'db:postgresql', :driver => 'postgres'
82
82
  task :test_postgres => :test_postgresql # alias
83
83
  task :test_pgsql => :test_postgresql # alias
84
84
  test_task_for :SQLite3
85
- test_task_for :FireBird
85
+ test_task_for :Firebird
86
86
 
87
87
  # ensure driver for these DBs is on your class-path
88
88
  [ :Oracle, :DB2, :Informix, :CacheDB ].each do |adapter|
@@ -7,7 +7,7 @@ namespace :db do
7
7
  load 'test/db/mysql_config.rb' # rescue nil
8
8
  script = sql_script <<-SQL, 'mysql'
9
9
  DROP DATABASE IF EXISTS `#{MYSQL_CONFIG[:database]}`;
10
- CREATE DATABASE `#{MYSQL_CONFIG[:database]}` DEFAULT CHARACTER SET `utf8`;
10
+ CREATE DATABASE `#{MYSQL_CONFIG[:database]}` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_general_ci`;
11
11
  GRANT ALL PRIVILEGES ON `#{MYSQL_CONFIG[:database]}`.* TO #{MYSQL_CONFIG[:username]}@localhost;
12
12
  GRANT ALL PRIVILEGES ON `test\_%`.* TO #{MYSQL_CONFIG[:username]}@localhost;
13
13
  SET PASSWORD FOR #{MYSQL_CONFIG[:username]}@localhost = PASSWORD('#{MYSQL_CONFIG[:password]}');
@@ -1,5 +1,5 @@
1
- /*
2
- **** BEGIN LICENSE BLOCK *****
1
+ /***** BEGIN LICENSE BLOCK *****
2
+ * Copyright (c) 2012-2013 Karol Bucek <self@kares.org>
3
3
  * Copyright (c) 2006-2010 Nick Sieger <nick@nicksieger.com>
4
4
  * Copyright (c) 2006-2007 Ola Bini <ola.bini@gmail.com>
5
5
  * Copyright (c) 2008-2009 Thomas E Enebo <enebo@acm.org>
@@ -1,4 +1,5 @@
1
1
  /***** BEGIN LICENSE BLOCK *****
2
+ * Copyright (c) 2012-2013 Karol Bucek <self@kares.org>
2
3
  * Copyright (c) 2006-2011 Nick Sieger <nick@nicksieger.com>
3
4
  * Copyright (c) 2006-2007 Ola Bini <ola.bini@gmail.com>
4
5
  *
@@ -29,7 +30,6 @@ import static arjdbc.util.QuotingUtils.BYTES_1;
29
30
  import static arjdbc.util.QuotingUtils.BYTES_SINGLE_Q_x2;
30
31
 
31
32
  import org.jruby.Ruby;
32
- import org.jruby.RubyBoolean;
33
33
  import org.jruby.RubyModule;
34
34
  import org.jruby.RubyString;
35
35
  import org.jruby.anno.JRubyMethod;
@@ -97,150 +97,10 @@ public class DerbyModule {
97
97
 
98
98
  }
99
99
 
100
- @JRubyMethod(name = "quote", required = 1, optional = 1)
101
- public static IRubyObject quote(final ThreadContext context,
102
- final IRubyObject self, final IRubyObject[] args) {
103
- final Ruby runtime = self.getRuntime();
104
- IRubyObject value = args[0];
105
- if ( args.length > 1 ) {
106
- final IRubyObject column = args[1];
107
- final String columnType = column.isNil() ? "" : column.callMethod(context, "type").toString();
108
- // intercept and change value, maybe, if the column type is :text or :string
109
- if ( columnType.equals("text") || columnType.equals("string") ) {
110
- value = toRubyStringForTextColumn(context, runtime, self, value);
111
- }
112
-
113
- if ( value instanceof RubyString ) {
114
- if ( columnType.equals("string") ) {
115
- return quoteString(runtime, "'", value, "'");
116
- }
117
- if ( columnType.equals("text") ) {
118
- return quoteString(runtime, "CAST('", value, "' AS CLOB)");
119
- }
120
- if ( columnType.equals("binary") ) {
121
- return quoteStringHex(runtime, "CAST(X'", value, "' AS BLOB)");
122
- }
123
- if ( columnType.equals("xml") ) {
124
- return quoteString(runtime, "XMLPARSE(DOCUMENT '", value, "' PRESERVE WHITESPACE)");
125
- }
126
- // column type :integer or other numeric or date version
127
- return isDigitsOnly(value) ? value : quoteDefault(context, runtime, self, value, column, columnType);
128
- }
129
-
130
- final String metaClass = value.getMetaClass().getName();
131
- if ( metaClass.equals("Float") || metaClass.equals("Fixnum") || metaClass.equals("Bignum") ) {
132
- if ( columnType.equals("string") ) {
133
- return quoteString(runtime, "'", RubyString.objAsString(context, value), "'");
134
- }
135
- }
136
- }
137
- return quoteDefault(context, runtime, self, value, runtime.getNil(), null);
138
- }
139
-
140
- private static IRubyObject quoted_date_OR_to_yaml(final ThreadContext context,
141
- final Ruby runtime, final IRubyObject self, final IRubyObject value) {
142
-
143
- if ( value.callMethod(context, "acts_like?", runtime.newSymbol("date")).isTrue()
144
- || value.callMethod(context, "acts_like?", runtime.newSymbol("time")).isTrue() ) {
145
- return self.callMethod(context, "quoted_date", value);
146
- }
147
- else {
148
- return value.callMethod(context, "to_yaml");
149
- }
150
- }
151
-
152
- /*
153
- * Derby is not permissive like MySql. Try and send an Integer to a CLOB or
154
- * VARCHAR column and Derby will vomit.
155
- * This method turns non stringy things into strings.
156
- */
157
- private static IRubyObject toRubyStringForTextColumn(
158
- final ThreadContext context, final Ruby runtime, final IRubyObject self,
159
- final IRubyObject value) {
160
-
161
- if ( value instanceof RubyString || value.isNil() || isMultibyteChars(runtime, value) ) {
162
- return value;
163
- }
164
-
165
- if ( value instanceof RubyBoolean ) return quoteBoolean(runtime, value);
166
-
167
- final String className = value.getMetaClass().getName();
168
- if ( className.equals("Float") || className.equals("Fixnum") || className.equals("Bignum") ) {
169
- return RubyString.objAsString(context, value);
170
- }
171
- if ( className.equals("BigDecimal") ) {
172
- return value.callMethod(context, "to_s", runtime.newString("F"));
173
- }
174
-
175
- return quoted_date_OR_to_yaml(context, runtime, self, value);
176
- }
177
-
178
- private final static ByteList NULL = new ByteList("NULL".getBytes(), false);
179
-
180
- private static IRubyObject quoteDefault(final ThreadContext context,
181
- final Ruby runtime, final IRubyObject self,
182
- final IRubyObject value, final IRubyObject column, final String columnType) {
183
-
184
- if ( value.respondsTo("quoted_id") ) {
185
- return value.callMethod(context, "quoted_id");
186
- }
187
-
188
- if ( value.isNil() ) {
189
- return runtime.newString(NULL);
190
- }
191
- if ( value instanceof RubyBoolean ) {
192
- if ( columnType == (Object) "integer" ) return quoteBoolean(runtime, value);
193
- return self.callMethod(context, value.isTrue() ? "quoted_true" : "quoted_false");
194
- }
195
- if ( value instanceof RubyString || isMultibyteChars(runtime, value) ) {
196
-
197
- final RubyString strValue = RubyString.objAsString(context, value);
198
-
199
- if ( columnType == (Object) "binary" && column.getType().respondsTo("string_to_binary") ) {
200
- IRubyObject str = column.getType().callMethod(context, "string_to_binary", strValue);
201
- return quoteString(runtime, "'", str, "'");
202
- }
203
-
204
- if ( columnType == (Object) "integer" ) {
205
- return RubyString.objAsString( context, strValue.callMethod(context, "to_i") );
206
- }
207
-
208
- if ( columnType == (Object) "float" ) {
209
- return RubyString.objAsString( context, strValue.callMethod(context, "to_f") );
210
- }
211
-
212
- return quoteString(runtime, "'", strValue, "'");
213
- }
214
-
215
- final String className = value.getMetaClass().getName();
216
- if ( className.equals("Float") || className.equals("Fixnum") || className.equals("Bignum") ) {
217
- return RubyString.objAsString(context, value);
218
- }
219
- if ( className.equals("BigDecimal") ) {
220
- return value.callMethod(context, "to_s", runtime.newString("F"));
221
- }
222
-
223
- IRubyObject strValue = quoted_date_OR_to_yaml(context, runtime, self, value);
224
- return quoteString(runtime, "'", strValue, "'");
225
- }
226
-
227
- private static IRubyObject quoteString(final Ruby runtime,
228
- final String before, final IRubyObject string, final String after) {
229
-
230
- final ByteList input = ((RubyString) string).getByteList();
231
- final ByteList output = new ByteList(before.getBytes(), input.getEncoding());
232
- final byte[] inputBytes = input.unsafeBytes();
233
-
234
- for(int i = input.getBegin(); i< input.getBegin() + input.getRealSize(); i++) {
235
- switch ( inputBytes[i] ) {
236
- case '\'': output.append(inputBytes[i]); // FALLTHROUGH
237
- default: output.append(inputBytes[i]);
238
- }
239
-
240
- }
241
-
242
- output.append(after.getBytes());
243
- return runtime.newString(output);
100
+ @JRubyMethod(name = "quote_binary", required = 1)
101
+ public static IRubyObject quote_binary(final ThreadContext context,
102
+ final IRubyObject self, final IRubyObject string) {
103
+ return quoteStringHex(context.getRuntime(), "", string, "");
244
104
  }
245
105
 
246
106
  private final static byte[] HEX = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
@@ -249,44 +109,35 @@ public class DerbyModule {
249
109
  final String before, final IRubyObject string, final String after) {
250
110
 
251
111
  final ByteList input = ((RubyString) string).getByteList();
252
- final ByteList output = new ByteList(before.getBytes());
112
+ final int size = input.getRealSize();
113
+ final ByteList output = new ByteList( before.length() + size * 2 + after.length() );
114
+ output.append( before.getBytes() );
115
+
253
116
  final byte[] inputBytes = input.unsafeBytes();
254
117
 
255
118
  int written = 0;
256
- for(int i = input.getBegin(); i< input.getBegin() + input.getRealSize(); i++) {
257
- byte b1 = inputBytes[i];
258
- byte higher = HEX[(((char)b1)>>4)%16];
259
- byte lower = HEX[((char)b1)%16];
260
- output.append(higher);
261
- output.append(lower);
119
+ for (int i = input.getBegin(); i < input.getBegin() + size; i++) {
120
+ final byte b = inputBytes[i];
121
+ byte h = HEX[ ( ((char) b) >> 4 ) % 16 ];
122
+ byte l = HEX[ ( (char) b ) % 16 ];
123
+ output.append(h).append(l);
262
124
  written += 2;
263
- if (written >= 16334) { // max hex length = 16334
125
+ if ( written >= 16334 ) { // max hex length = 16334
264
126
  output.append("'||X'".getBytes());
265
127
  written = 0;
266
128
  }
267
129
  }
268
130
 
269
- output.append(after.getBytes());
131
+ output.append( after.getBytes() );
270
132
  return RubyString.newStringShared(runtime, output);
271
133
  }
272
134
 
273
- private static boolean isDigitsOnly(final IRubyObject string) {
274
- final ByteList input = ((RubyString) string).getByteList();
275
- final byte[] inputBytes = input.unsafeBytes();
276
- for ( int i = input.getBegin(); i< input.getBegin() + input.getRealSize(); i++ ) {
277
- if ( inputBytes[i] < '0' || inputBytes[i] > '9' ) {
278
- return false;
279
- }
280
- }
281
- return true;
282
- }
283
-
284
- private static boolean isMultibyteChars(final Ruby runtime, final IRubyObject value) {
285
- return getMultibyteChars(runtime).isInstance(value);
286
- }
287
-
288
135
  @JRubyMethod(name = "quote_string", required = 1)
289
136
  public static IRubyObject quote_string(final IRubyObject self, IRubyObject string) {
137
+ if ( ! ( string instanceof RubyString ) ) {
138
+ string = string.asString(); // e.g. Multibyte::Chars
139
+ }
140
+
290
141
  ByteList bytes = ((RubyString) string).getByteList();
291
142
 
292
143
  boolean replacement = false;
@@ -310,15 +161,13 @@ public class DerbyModule {
310
161
 
311
162
  @JRubyMethod(name = "quoted_true", required = 0, frame = false)
312
163
  public static IRubyObject quoted_true(
313
- final ThreadContext context,
314
- final IRubyObject self) {
164
+ final ThreadContext context, final IRubyObject self) {
315
165
  return RubyString.newString(context.getRuntime(), BYTES_1);
316
166
  }
317
167
 
318
168
  @JRubyMethod(name = "quoted_false", required = 0, frame = false)
319
169
  public static IRubyObject quoted_false(
320
- final ThreadContext context,
321
- final IRubyObject self) {
170
+ final ThreadContext context, final IRubyObject self) {
322
171
  return RubyString.newString(context.getRuntime(), BYTES_0);
323
172
  }
324
173
 
@@ -326,6 +175,10 @@ public class DerbyModule {
326
175
  return value.isTrue() ? runtime.newString(BYTES_1) : runtime.newString(BYTES_0);
327
176
  }
328
177
 
178
+ private static boolean isMultibyteChars(final Ruby runtime, final IRubyObject value) {
179
+ return getMultibyteChars(runtime).isInstance(value);
180
+ }
181
+
329
182
  private static RubyModule getMultibyteChars(final Ruby runtime) {
330
183
  return (RubyModule) ((RubyModule) runtime.getModule("ActiveSupport").
331
184
  getConstant("Multibyte")).getConstantAt("Chars");
@@ -1,4 +1,5 @@
1
1
  /***** BEGIN LICENSE BLOCK *****
2
+ * Copyright (c) 2012-2013 Karol Bucek <self@kares.org>
2
3
  * Copyright (c) 2006-2010 Nick Sieger <nick@nicksieger.com>
3
4
  * Copyright (c) 2006-2007 Ola Bini <ola.bini@gmail.com>
4
5
  *
@@ -1,5 +1,4 @@
1
- /*
2
- **** BEGIN LICENSE BLOCK *****
1
+ /***** BEGIN LICENSE BLOCK *****
3
2
  * Copyright (c) 2006-2010 Nick Sieger <nick@nicksieger.com>
4
3
  * Copyright (c) 2006-2007 Ola Bini <ola.bini@gmail.com>
5
4
  * Copyright (c) 2008-2009 Thomas E Enebo <enebo@acm.org>
@@ -1,4 +1,5 @@
1
1
  /***** BEGIN LICENSE BLOCK *****
2
+ * Copyright (c) 2012-2013 Karol Bucek <self@kares.org>
2
3
  * Copyright (c) 2006-2010 Nick Sieger <nick@nicksieger.com>
3
4
  * Copyright (c) 2006-2007 Ola Bini <ola.bini@gmail.com>
4
5
  *
@@ -35,33 +36,33 @@ import org.jruby.runtime.ThreadContext;
35
36
  import org.jruby.runtime.builtin.IRubyObject;
36
37
 
37
38
  public class HSQLDBModule {
38
-
39
+
39
40
  public static RubyModule load(final RubyModule arJdbc) {
40
41
  RubyModule hsqldb = arJdbc.defineModuleUnder("HSQLDB");
41
42
  hsqldb.defineAnnotatedMethods( HSQLDBModule.class );
42
43
  return hsqldb;
43
44
  }
44
-
45
+
45
46
  @JRubyMethod(name = "quote_string", required = 1, frame = false)
46
47
  public static IRubyObject quote_string(
47
- final ThreadContext context,
48
- final IRubyObject self,
48
+ final ThreadContext context,
49
+ final IRubyObject self,
49
50
  final IRubyObject string) {
50
51
  return quoteSingleQuotesWithFallback(context, string);
51
52
  }
52
-
53
+
53
54
  @JRubyMethod(name = "quoted_true", required = 0, frame = false)
54
55
  public static IRubyObject quoted_true(
55
- final ThreadContext context,
56
+ final ThreadContext context,
56
57
  final IRubyObject self) {
57
58
  return RubyString.newString(context.getRuntime(), BYTES_1);
58
59
  }
59
-
60
+
60
61
  @JRubyMethod(name = "quoted_false", required = 0, frame = false)
61
62
  public static IRubyObject quoted_false(
62
- final ThreadContext context,
63
+ final ThreadContext context,
63
64
  final IRubyObject self) {
64
65
  return RubyString.newString(context.getRuntime(), BYTES_0);
65
66
  }
66
-
67
+
67
68
  }