[#6620] NPE "Error while fetching indexes" while generating code for function based indexes

This commit is contained in:
lukaseder 2017-09-29 16:38:36 +02:00
parent a0cb20f41b
commit 885a6dc966
5 changed files with 37 additions and 2 deletions

View File

@ -134,6 +134,7 @@ public class H2Database extends AbstractDatabase {
Indexes.ORDINAL_POSITION
});
indexLoop:
for (Entry<Record, Result<Record>> entry : indexes.entrySet()) {
final Record index = entry.getKey();
final Result<Record> columns = entry.getValue();
@ -145,6 +146,12 @@ public class H2Database extends AbstractDatabase {
final boolean unique = !index.get(Indexes.NON_UNIQUE, boolean.class);
if (table != null) {
// [#6310] [#6620] Function-based indexes are not yet supported
for (Record column : columns)
if (table.getColumn(column.get(Indexes.COLUMN_NAME)) == null)
continue indexLoop;
result.add(new AbstractIndexDefinition(tableSchema, indexName, table, unique) {
List<IndexColumnDefinition> indexColumns = new ArrayList<IndexColumnDefinition>();

View File

@ -134,6 +134,7 @@ public class HSQLDBDatabase extends AbstractDatabase {
SYSTEM_INDEXINFO.ASC_OR_DESC
});
indexLoop:
for (Entry<Record, Result<Record>> entry : indexes.entrySet()) {
final Record index = entry.getKey();
final Result<Record> cols = entry.getValue();
@ -145,6 +146,12 @@ public class HSQLDBDatabase extends AbstractDatabase {
final boolean unique = !index.get(SYSTEM_INDEXINFO.NON_UNIQUE, boolean.class);
if (table != null) {
// [#6310] [#6620] Function-based indexes are not yet supported
for (Record column : cols)
if (table.getColumn(column.get(SYSTEM_INDEXINFO.COLUMN_NAME)) == null)
continue indexLoop;
result.add(new AbstractIndexDefinition(tableSchema, indexName, table, unique) {
List<IndexColumnDefinition> indexColumns = new ArrayList<IndexColumnDefinition>();

View File

@ -138,6 +138,7 @@ public class MySQLDatabase extends AbstractDatabase {
Statistics.SEQ_IN_INDEX
});
indexLoop:
for (Entry<Record, Result<Record>> entry : indexes.entrySet()) {
final Record index = entry.getKey();
final Result<Record> columns = entry.getValue();
@ -149,6 +150,12 @@ public class MySQLDatabase extends AbstractDatabase {
final boolean unique = !index.get(Statistics.NON_UNIQUE, boolean.class);
if (table != null) {
// [#6310] [#6620] Function-based indexes are not yet supported
for (Record column : columns)
if (table.getColumn(column.get(Statistics.COLUMN_NAME)) == null)
continue indexLoop;
result.add(new AbstractIndexDefinition(tableSchema, indexName, table, unique) {
List<IndexColumnDefinition> indexColumns = new ArrayList<IndexColumnDefinition>();

View File

@ -152,6 +152,7 @@ public class PostgresDatabase extends AbstractDatabase {
PgClass irel = PG_CLASS.as("irel");
PgNamespace tnsp = PG_NAMESPACE.as("tnsp");
indexLoop:
for (Record6<String, String, String, Boolean, String[], Integer[]> record : create()
.select(
tnsp.NSPNAME,
@ -180,12 +181,18 @@ public class PostgresDatabase extends AbstractDatabase {
final boolean unique = record.get(i.INDISUNIQUE);
if (table != null) {
// [#6310] [#6620] Function-based indexes are not yet supported
for (String column : columns)
if (table.getColumn(column) == null)
continue indexLoop;
result.add(new AbstractIndexDefinition(tableSchema, indexName, table, unique) {
List<IndexColumnDefinition> indexColumns = new ArrayList<IndexColumnDefinition>();
{
for (int ordinal = 0; ordinal < columns.length; ordinal++) {
String column = columns[ordinal];
ColumnDefinition column = table.getColumn(columns[ordinal]);
// [#6307] Some background info on this bitwise operation here:
// https://stackoverflow.com/a/18128104/521799
@ -193,7 +200,7 @@ public class PostgresDatabase extends AbstractDatabase {
indexColumns.add(new DefaultIndexColumnDefinition(
this,
table.getColumn(column),
column,
order,
ordinal + 1
));

View File

@ -132,6 +132,7 @@ public class SQLiteDatabase extends AbstractDatabase {
fSeqno
});
indexLoop:
for (Entry<Record, Result<Record>> entry : indexes.entrySet()) {
final Record index = entry.getKey();
final Result<Record> columns = entry.getValue();
@ -143,6 +144,12 @@ public class SQLiteDatabase extends AbstractDatabase {
final boolean unique = index.get(fUnique);
if (table != null) {
// [#6310] [#6620] Function-based indexes are not yet supported
for (Record column : columns)
if (table.getColumn(column.get(fColumnName)) == null)
continue indexLoop;
result.add(new AbstractIndexDefinition(tableSchema, indexName, table, unique) {
List<IndexColumnDefinition> indexColumns = new ArrayList<IndexColumnDefinition>();