From a56a4dc09255ee475dde7be6eff9e6bc9b43d2d5 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Sun, 21 Feb 2016 13:19:54 +0100 Subject: [PATCH] [#5097] Table.getPrimaryKey() does not work with SQLite's Xerial JDBC driver, when primary key column contains upper-case characters --- jOOQ/src/main/java/org/jooq/impl/MetaImpl.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java index 8a5c180043..27148d0c80 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java @@ -650,8 +650,19 @@ final class MetaImpl implements Meta, Serializable { if (result.size() > 0) { TableField[] f = new TableField[result.size()]; - for (int i = 0; i < f.length; i++) - f[i] = (TableField) field(result.get(i).getValue(columnName, String.class)); + for (int i = 0; i < f.length; i++) { + String name = result.get(i).getValue(columnName, String.class); + f[i] = (TableField) field(name); + + // [#5097] Work around a bug in the Xerial JDBC driver for SQLite + if (f[i] == null && configuration.family() == SQLITE) + + // [#2656] Use native support for case-insensitive column + // lookup, once this is implemented + for (Field field : fields()) + if (field.getName().equalsIgnoreCase(name)) + f[i] = (TableField) field; + } String indexName = result.get(0).getValue(5, String.class); return new MetaPrimaryKey(this, indexName, f);