From 9bea1239a29b6acffe70d4ccc76e8434d6d4f615 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Fri, 16 Feb 2018 13:17:14 +0100 Subject: [PATCH] [#7189] NullPointerException when DSL.name(Name...) contains a null Name argument --- .../java/org/jooq/impl/QualifiedName.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/QualifiedName.java b/jOOQ/src/main/java/org/jooq/impl/QualifiedName.java index 19986ee21b..98245ee9aa 100644 --- a/jOOQ/src/main/java/org/jooq/impl/QualifiedName.java +++ b/jOOQ/src/main/java/org/jooq/impl/QualifiedName.java @@ -64,7 +64,7 @@ final class QualifiedName extends AbstractName { } QualifiedName(Name[] qualifiedName) { - this.qualifiedName = last(qualifiedName); + this.qualifiedName = last(nonEmpty(qualifiedName)); } private QualifiedName(UnqualifiedName[] qualifiedName) { @@ -124,6 +124,30 @@ final class QualifiedName extends AbstractName { return result; } + private static final Name[] nonEmpty(Name[] names) { + Name[] result; + int nulls = 0; + + for (int i = 0; i < names.length; i++) + if (names[i] == null) + nulls++; + + if (nulls > 0) { + result = new Name[names.length - nulls]; + + for (int i = names.length - 1; i >= 0; i--) + if (names[i] == null) + nulls--; + else + result[i - nulls] = names[i]; + } + else { + result = names; + } + + return result; + } + @Override public final void accept(Context ctx) {