Guest User

Untitled

a guest
Feb 28th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.76 KB | None | 0 0
  1. diff --git a/lib/active_record/connection_adapters/jdbc_adapter.rb b/lib/active_record/connection_adapters/jdbc_adapter.rb
  2. index b40a59e..e5cbd63 100644
  3. --- a/lib/active_record/connection_adapters/jdbc_adapter.rb
  4. +++ b/lib/active_record/connection_adapters/jdbc_adapter.rb
  5. @@ -374,15 +374,15 @@ module ActiveRecord
  6. while resultset.next
  7. index_name = resultset.get_string(Jdbc::IndexMetaData::INDEX_NAME)
  8. next unless index_name
  9. - index_name.downcase!
  10. - column_name = resultset.get_string(Jdbc::IndexMetaData::COLUMN_NAME).downcase
  11. + index_name#.downcase!
  12. + column_name = resultset.get_string(Jdbc::IndexMetaData::COLUMN_NAME)#.downcase
  13.  
  14. next if primary_keys.include? column_name
  15.  
  16. # We are working on a new index
  17. if current_index != index_name
  18. current_index = index_name
  19. - table_name = resultset.get_string(Jdbc::IndexMetaData::TABLE_NAME).downcase
  20. + table_name = resultset.get_string(Jdbc::IndexMetaData::TABLE_NAME)#.downcase
  21. non_unique = resultset.get_boolean(Jdbc::IndexMetaData::NON_UNIQUE)
  22.  
  23. # empty list for column names, we'll add to that in just a bit
  24. diff --git a/src/java/jdbc_adapter/RubyJdbcConnection.java b/src/java/jdbc_adapter/RubyJdbcConnection.java
  25. index 04ad0b0..a823746 100644
  26. --- a/src/java/jdbc_adapter/RubyJdbcConnection.java
  27. +++ b/src/java/jdbc_adapter/RubyJdbcConnection.java
  28. @@ -268,7 +268,7 @@ public class RubyJdbcConnection extends RubyObject {
  29. try {
  30. stmt = c.createStatement();
  31. stmt.setMaxRows(maxRows);
  32. - return unmarshalResult(context, stmt.executeQuery(query), false);
  33. + return unmarshalResult(context, stmt.executeQuery(query), c.getMetaData().storesUpperCaseIdentifiers(), false);
  34. } finally {
  35. close(stmt);
  36. }
  37.  
  38. @@ -386,14 +386,15 @@ public class RubyJdbcConnection extends RubyObject {
  39. public static IRubyObject select_p(ThreadContext context, IRubyObject recv, IRubyObject _sql) {
  40. ByteList sql = rubyApi.convertToRubyString(_sql).getByteList();
  41.  
  42. - return context.getRuntime().newBoolean(startsWithNoCaseCmp(sql, SELECT) ||
  43. + return context.getRuntime().newBoolean(startsWithNoCaseCmp(sql, SELECT) ||
  44. startsWithNoCaseCmp(sql, SHOW) || startsWithNoCaseCmp(sql, CALL));
  45. }
  46.  
  47. @JRubyMethod(name = "set_native_database_types")
  48. public IRubyObject set_native_database_types(ThreadContext context) throws SQLException, IOException {
  49. Ruby runtime = context.getRuntime();
  50. - IRubyObject types = unmarshalResult(context, getConnection(true).getMetaData().getTypeInfo(), true);
  51. + DatabaseMetaData metaData = getConnection(true).getMetaData();
  52. + IRubyObject types = unmarshalResult(context, metaData.getTypeInfo(), metaData.storesUpperCaseIdentifiers(), true);
  53. IRubyObject typeConverter = getConnectionAdapters(runtime).getConstant("JdbcTypeConverter");
  54. IRubyObject value = rubyApi.callMethod(rubyApi.callMethod(typeConverter, "new", types), "choose_best_types");
  55. setInstanceVariable("@native_types", value);
  56. @@ -803,7 +804,13 @@ public class RubyJdbcConnection extends RubyObject {
  57. rs = metadata.getTables(catalog, realschema, realtablepat, types);
  58. List arr = new ArrayList();
  59. while (rs.next()) {
  60. - String name = rs.getString(3).toLowerCase();
  61. + //String name = rs.getString(3).toLowerCase();
  62. +
  63. +
  64. +
  65. + String name = rs.getString(3);
  66. +
  67. +
  68. // Handle stupid Oracle 10g RecycleBin feature
  69. if (!isOracle || !name.startsWith("bin$")) {
  70. arr.add(RubyString.newUnicodeString(runtime, name));
  71. @@ -923,13 +930,12 @@ public class RubyJdbcConnection extends RubyObject {
  72. * @param downCase should column names only be in lower case?
  73. */
  74. protected static IRubyObject unmarshalResult(ThreadContext context, ResultSet resultSet,
  75. - boolean downCase) throws SQLException {
  76. + boolean storesUpper, boolean downCase) throws SQLException {
  77. Ruby runtime = context.getRuntime();
  78. List results = new ArrayList();
  79.  
  80. try {
  81. - boolean storesUpper = !downCase && resultSet.getStatement().getConnection().getMetaData().storesUpperCaseIdentifiers();
  82. - ColumnData[] columns = ColumnData.setup(runtime, resultSet.getMetaData(), storesUpper);
  83. + ColumnData[] columns = ColumnData.setup(runtime, resultSet.getMetaData(), storesUpper, downCase);
  84.  
  85. populateFromResultSet(context, runtime, results, resultSet, columns);
  86. } finally {
  87. @@ -991,7 +997,7 @@ public class RubyJdbcConnection extends RubyObject {
  88.  
  89. return end;
  90. }
  91. -
  92. +
  93. private static byte[] CALL = new byte[]{'c', 'a', 'l', 'l'};
  94. private static byte[] INSERT = new byte[] {'i', 'n', 's', 'e', 'r', 't'};
  95. private static byte[] SELECT = new byte[] {'s', 'e', 'l', 'e', 'c', 't'};
  96. @@ -1020,14 +1026,20 @@ public class RubyJdbcConnection extends RubyObject {
  97. }
  98.  
  99. public static ColumnData[] setup(Ruby runtime, ResultSetMetaData metadata,
  100. - boolean storesUpper) throws SQLException {
  101. + boolean storesUpper, boolean downCase) throws SQLException {
  102. int columnsCount = metadata.getColumnCount();
  103. ColumnData[] columns = new ColumnData[columnsCount];
  104.  
  105. for (int i = 1; i <= columnsCount; i++) { // metadata is one-based
  106. String name = metadata.getColumnLabel(i);
  107. - // We don't want to lowercase mixed case columns
  108. - if (!storesUpper || (storesUpper && !HAS_SMALL.matcher(name).find())) name = name.toLowerCase();
  109.  
  110. + // We don't want to lowercase mixed case colums
  111. + if (downCase || (storesUpper && !HAS_SMALL.matcher(name).find()))
  112. + name = name.toLowerCase();
  113.  
  114. columns[i - 1] = new ColumnData(RubyString.newUnicodeString(runtime, name),
  115. metadata.getColumnType(i));
  116. diff --git a/test/simple.rb b/test/simple.rb
  117. index da064fa..6e9e4ed 100644
  118. --- a/test/simple.rb
  119. +++ b/test/simple.rb
  120. @@ -5,6 +5,13 @@ ActiveRecord::Base.default_timezone = :utc
  121. #just a random zone, unlikely to be local, and not utc
  122. Time.zone = 'Moscow' if Time.respond_to?(:zone)
  123.  
  124. +module Rails
  125. + def Rails.logger
  126. + ActiveRecord::Base.logger
  127. + end
  128. +end
  129. +
  130. +
  131. module MigrationSetup
  132. def setup
  133. DbTypeMigration.up
Add Comment
Please, Sign In to add comment