diff --git a/jOOQ-meta/src/main/java/org/jooq/util/h2/H2Database.java b/jOOQ-meta/src/main/java/org/jooq/util/h2/H2Database.java index ad69c87820..5f6da6c31c 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/h2/H2Database.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/h2/H2Database.java @@ -134,6 +134,7 @@ public class H2Database extends AbstractDatabase { Indexes.ORDINAL_POSITION }); + indexLoop: for (Entry> entry : indexes.entrySet()) { final Record index = entry.getKey(); final Result 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 indexColumns = new ArrayList(); diff --git a/jOOQ-meta/src/main/java/org/jooq/util/hsqldb/HSQLDBDatabase.java b/jOOQ-meta/src/main/java/org/jooq/util/hsqldb/HSQLDBDatabase.java index 0cd3197637..2d49af1a49 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/hsqldb/HSQLDBDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/hsqldb/HSQLDBDatabase.java @@ -134,6 +134,7 @@ public class HSQLDBDatabase extends AbstractDatabase { SYSTEM_INDEXINFO.ASC_OR_DESC }); + indexLoop: for (Entry> entry : indexes.entrySet()) { final Record index = entry.getKey(); final Result 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 indexColumns = new ArrayList(); diff --git a/jOOQ-meta/src/main/java/org/jooq/util/mysql/MySQLDatabase.java b/jOOQ-meta/src/main/java/org/jooq/util/mysql/MySQLDatabase.java index 82edab50a0..7779e204d9 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/mysql/MySQLDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/mysql/MySQLDatabase.java @@ -138,6 +138,7 @@ public class MySQLDatabase extends AbstractDatabase { Statistics.SEQ_IN_INDEX }); + indexLoop: for (Entry> entry : indexes.entrySet()) { final Record index = entry.getKey(); final Result 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 indexColumns = new ArrayList(); diff --git a/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresDatabase.java b/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresDatabase.java index c6ee435bff..1578fdfa71 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/postgres/PostgresDatabase.java @@ -152,6 +152,7 @@ public class PostgresDatabase extends AbstractDatabase { PgClass irel = PG_CLASS.as("irel"); PgNamespace tnsp = PG_NAMESPACE.as("tnsp"); + indexLoop: for (Record6 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 indexColumns = new ArrayList(); { 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 )); diff --git a/jOOQ-meta/src/main/java/org/jooq/util/sqlite/SQLiteDatabase.java b/jOOQ-meta/src/main/java/org/jooq/util/sqlite/SQLiteDatabase.java index c88773a074..95bc1b3d85 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/sqlite/SQLiteDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/sqlite/SQLiteDatabase.java @@ -132,6 +132,7 @@ public class SQLiteDatabase extends AbstractDatabase { fSeqno }); + indexLoop: for (Entry> entry : indexes.entrySet()) { final Record index = entry.getKey(); final Result 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 indexColumns = new ArrayList();