Skip to content
This repository has been archived by the owner on Apr 17, 2018. It is now read-only.

Commit

Permalink
[data_objects][do_jdbc] Character encoding fixes on JRuby
Browse files Browse the repository at this point in the history
* Begin better specs of reading/writing multibyte Strings

[#1172 state:resolved]

Signed-off-by: Alex Coles <alex@alexcolesportfolio.com>
  • Loading branch information
myabc committed Jan 7, 2010
1 parent 18d7615 commit 1ecb048
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 4 deletions.
37 changes: 37 additions & 0 deletions data_objects/lib/data_objects/spec/typecast/string_spec.rb
@@ -1,3 +1,5 @@
# encoding: utf-8

shared 'supporting String' do

setup_test_environment
Expand Down Expand Up @@ -79,6 +81,41 @@

end

describe 'writing and reading a multibyte String' do

['Aslak Hellesøy',
'Пётр Алексе́евич Рома́нов',
'歐陽龍'].each do |name|

it 'should write a multibyte String' do
@command = @connection.create_command('INSERT INTO users (name) VALUES(?)')
should.not.raise(DataObjects::DataError) { @command.execute_non_query(name) }
end

it 'should read back the multibyte String' do
@command = @connection.create_command('SELECT name FROM users WHERE name = ?')
@reader = @command.execute_reader(name)
@reader.next!
@reader.values.first.should == name
@reader.close
end

it 'should write a multibyte String (without query parameters)' do
@command = @connection.create_command("INSERT INTO users (name) VALUES(\'#{name}\')")
should.not.raise(DataObjects::DataError) { @command.execute_non_query }
end

it 'should read back the multibyte String (without query parameters)' do
@command = @connection.create_command("SELECT name FROM users WHERE name = \'#{name}\'")
@reader = @command.execute_reader
@reader.next!
@reader.values.first.should == name
@reader.close
end

end
end

class ::StringWithExtraPowers < String; end

describe 'writing a kind of (subclass of) String' do
Expand Down
5 changes: 3 additions & 2 deletions do_jdbc/src/main/java/data_objects/Command.java
Expand Up @@ -242,8 +242,9 @@ public IRubyObject execute_reader(IRubyObject[] args) {

// execute the query
try {
String sqlText = prepareSqlTextForPs(api.getInstanceVariable(this,
"@text").asJavaString(), args);
String doSqlText = api.convertToRubyString(
api.getInstanceVariable(this, "@text")).getUnicodeValue();
String sqlText = prepareSqlTextForPs(doSqlText, args);

sqlStatement = conn.prepareStatement(
sqlText,
Expand Down
Expand Up @@ -465,7 +465,7 @@ public void setPreparedStatementParam(PreparedStatement ps,
ps.setBoolean(idx, arg.toString().equals("true"));
break;
case STRING:
ps.setString(idx, arg.toString());
ps.setString(idx, arg.asString().getUnicodeValue());
break;
case CLASS:
ps.setString(idx, arg.toString());
Expand Down
Expand Up @@ -84,7 +84,7 @@ public void setPreparedStatementParam(PreparedStatement ps,
ps.setInt(idx, Integer.valueOf(arg.toString()));
break;
default:
ps.setString(idx, arg.toString());
ps.setString(idx, arg.asString().getUnicodeValue());
}
break;
case BYTE_ARRAY:
Expand Down

0 comments on commit 1ecb048

Please sign in to comment.