Skip to content

Commit ca876f2

Browse files
drepshassebersole
authored andcommitted
HHH-10054 Modify Create Index SQL to support the Teradata database
(cherry picked from commit 216848b)
1 parent 63612f6 commit ca876f2

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

hibernate-core/src/main/java/org/hibernate/dialect/Teradata14Dialect.java

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,25 @@
88

99
import org.hibernate.HibernateException;
1010
import org.hibernate.LockOptions;
11+
import org.hibernate.boot.Metadata;
12+
import org.hibernate.boot.model.relational.QualifiedNameImpl;
1113
import org.hibernate.cfg.Environment;
1214
import org.hibernate.dialect.function.SQLFunctionTemplate;
15+
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
1316
import org.hibernate.exception.spi.TemplatedViolatedConstraintNameExtracter;
1417
import org.hibernate.exception.spi.ViolatedConstraintNameExtracter;
18+
import org.hibernate.mapping.Column;
19+
import org.hibernate.mapping.Index;
1520
import org.hibernate.sql.ForUpdateFragment;
21+
import org.hibernate.tool.schema.internal.StandardIndexExporter;
22+
import org.hibernate.tool.schema.spi.Exporter;
1623
import org.hibernate.type.StandardBasicTypes;
1724

1825
import java.sql.CallableStatement;
1926
import java.sql.ResultSet;
2027
import java.sql.SQLException;
2128
import java.sql.Types;
29+
import java.util.Iterator;
2230
import java.util.Map;
2331

2432
/**
@@ -28,6 +36,8 @@ public class Teradata14Dialect extends TeradataDialect {
2836
/**
2937
* Constructor
3038
*/
39+
StandardIndexExporter TeraIndexExporter = null;
40+
3141
public Teradata14Dialect() {
3242
super();
3343
//registerColumnType data types
@@ -41,6 +51,8 @@ public Teradata14Dialect() {
4151

4252
registerFunction( "current_time", new SQLFunctionTemplate( StandardBasicTypes.TIME, "current_time" ) );
4353
registerFunction( "current_date", new SQLFunctionTemplate( StandardBasicTypes.DATE, "current_date" ) );
54+
55+
TeraIndexExporter = new TeradataIndexExporter( this );
4456
}
4557

4658
@Override
@@ -200,5 +212,68 @@ public boolean useFollowOnLocking() {
200212
public boolean supportsLockTimeouts() {
201213
return false;
202214
}
215+
216+
@Override
217+
public Exporter<Index> getIndexExporter() {
218+
return TeraIndexExporter;
219+
}
220+
221+
222+
private class TeradataIndexExporter extends StandardIndexExporter implements Exporter<Index> {
223+
224+
public TeradataIndexExporter(Dialect dialect) {
225+
super(dialect);
226+
}
227+
228+
@Override
229+
public String[] getSqlCreateStrings(Index index, Metadata metadata) {
230+
final JdbcEnvironment jdbcEnvironment = metadata.getDatabase().getJdbcEnvironment();
231+
final String tableName = jdbcEnvironment.getQualifiedObjectNameFormatter().format(
232+
index.getTable().getQualifiedTableName(),
233+
jdbcEnvironment.getDialect()
234+
);
235+
236+
final String indexNameForCreation;
237+
if ( getDialect().qualifyIndexName() ) {
238+
indexNameForCreation = jdbcEnvironment.getQualifiedObjectNameFormatter().format(
239+
new QualifiedNameImpl(
240+
index.getTable().getQualifiedTableName().getCatalogName(),
241+
index.getTable().getQualifiedTableName().getSchemaName(),
242+
jdbcEnvironment.getIdentifierHelper().toIdentifier( index.getName() )
243+
),
244+
jdbcEnvironment.getDialect()
245+
);
246+
}
247+
else {
248+
indexNameForCreation = index.getName();
249+
}
250+
251+
StringBuilder colBuf = new StringBuilder("");
252+
boolean first = true;
253+
Iterator<Column> columnItr = index.getColumnIterator();
254+
while ( columnItr.hasNext() ) {
255+
final Column column = columnItr.next();
256+
if ( first ) {
257+
first = false;
258+
}
259+
else {
260+
colBuf.append( ", " );
261+
}
262+
colBuf.append( ( column.getQuotedName( jdbcEnvironment.getDialect() )) );
263+
}
264+
colBuf.append( ")" );
265+
266+
final StringBuilder buf = new StringBuilder()
267+
.append( "create index " )
268+
.append( indexNameForCreation )
269+
.append( "(" + colBuf )
270+
.append( " on " )
271+
.append( tableName );
272+
273+
return new String[] { buf.toString() };
274+
}
275+
}
276+
277+
203278
}
204279

0 commit comments

Comments
 (0)