HHH-7198 - SQLServer2005Dialect.getLimitString turns tablenames to lowercase -> SQLGrammarException: when mapping tables with capital letters

This commit is contained in:
Steve Ebersole 2012-05-04 10:49:08 -05:00
parent 8e45457728
commit 3cddb27d60
2 changed files with 8 additions and 3 deletions

View File

@ -38,7 +38,7 @@ import org.hibernate.type.StandardBasicTypes;
*/ */
public class SQLServer2005Dialect extends SQLServerDialect { public class SQLServer2005Dialect extends SQLServerDialect {
private static final String SELECT = "select"; private static final String SELECT = "select";
private static final String FROM = "from "; private static final String FROM = "from";
private static final String DISTINCT = "distinct "; private static final String DISTINCT = "distinct ";
private static final int MAX_LENGTH = 8000; private static final int MAX_LENGTH = 8000;
@ -157,6 +157,9 @@ public class SQLServer2005Dialect extends SQLServerDialect {
} }
} }
public static final String SELECT_WITH_SPACE = SELECT + ' ';
public static final String FROM_WITH_SPACE = FROM + ' ';
/** /**
* This utility method searches the given sql query for the fields of the select statement and returns them without * This utility method searches the given sql query for the fields of the select statement and returns them without
* the aliases. * the aliases.
@ -167,7 +170,9 @@ public class SQLServer2005Dialect extends SQLServerDialect {
*/ */
protected static CharSequence getSelectFieldsWithoutAliases(StringBuilder sql) { protected static CharSequence getSelectFieldsWithoutAliases(StringBuilder sql) {
final String lower = sql.toString().toLowerCase(); final String lower = sql.toString().toLowerCase();
String select = sql.substring( lower.indexOf( SELECT ) + SELECT.length(), lower.indexOf( FROM ) ); final int selectStartPos = lower.indexOf( SELECT_WITH_SPACE );
final int fromStartPos = lower.indexOf( FROM_WITH_SPACE, selectStartPos );
String select = sql.substring( selectStartPos + SELECT.length(), fromStartPos );
// Strip the as clauses // Strip the as clauses
return stripAliases( select ); return stripAliases( select );

View File

@ -45,7 +45,7 @@ public class SQLServer2005DialectTestCase extends BaseUnitTestCase {
@Test @Test
public void testGetSelectFieldsWithoutAliases() { public void testGetSelectFieldsWithoutAliases() {
StringBuilder input = new StringBuilder( "select some_field1 as f12, some_fild2 as f879, _field3 as _f24674_3 from...." ); StringBuilder input = new StringBuilder( "select some_field1 as f12, some_fild2 as f879, _field3 as _f24674_3 from ...." );
String output = SQLServer2005Dialect.getSelectFieldsWithoutAliases( input ).toString(); String output = SQLServer2005Dialect.getSelectFieldsWithoutAliases( input ).toString();
assertEquals( " some_field1, some_fild2, _field3", output ); assertEquals( " some_field1, some_fild2, _field3", output );