From a239eea8ff07e836d391ff0c5e73503c28369d9b Mon Sep 17 00:00:00 2001 From: Peter Turcsanyi Date: Tue, 3 Aug 2021 20:41:43 +0200 Subject: [PATCH] NIFI-8996: Close JDBC statements in PutHive*QL processors. Signed-off-by: Matthew Burgess This closes #5280 --- .../nifi/processors/hive/PutHiveQL.java | 41 ++++++++--------- .../nifi/processors/hive/PutHive3QL.java | 45 ++++++++++--------- .../nifi/processors/hive/PutHive_1_1QL.java | 41 ++++++++--------- 3 files changed, 65 insertions(+), 62 deletions(-) diff --git a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/main/java/org/apache/nifi/processors/hive/PutHiveQL.java b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/main/java/org/apache/nifi/processors/hive/PutHiveQL.java index e1aeade776..57462c4f28 100644 --- a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/main/java/org/apache/nifi/processors/hive/PutHiveQL.java +++ b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive-processors/src/main/java/org/apache/nifi/processors/hive/PutHiveQL.java @@ -230,29 +230,30 @@ public class PutHiveQL extends AbstractHiveQLProcessor { final String hiveQL = hiveQLStr.trim(); if (!StringUtils.isEmpty(hiveQL)) { - final PreparedStatement stmt = conn.prepareStatement(hiveQL); + try (final PreparedStatement stmt = conn.prepareStatement(hiveQL)) { - // Get ParameterMetadata - // Hive JDBC Doesn't support this yet: - // ParameterMetaData pmd = stmt.getParameterMetaData(); - // int paramCount = pmd.getParameterCount(); - int paramCount = StringUtils.countMatches(hiveQL, "?"); + // Get ParameterMetadata + // Hive JDBC Doesn't support this yet: + // ParameterMetaData pmd = stmt.getParameterMetaData(); + // int paramCount = pmd.getParameterCount(); + int paramCount = StringUtils.countMatches(hiveQL, "?"); - if (paramCount > 0) { - loc = setParameters(loc, stmt, paramCount, flowFile.getAttributes()); + if (paramCount > 0) { + loc = setParameters(loc, stmt, paramCount, flowFile.getAttributes()); + } + + // Parse hiveQL and extract input/output tables + try { + tableNames.addAll(findTableNames(hiveQL)); + } catch (Exception e) { + // If failed to parse the query, just log a warning message, but continue. + getLogger().warn("Failed to parse hiveQL: {} due to {}", new Object[]{hiveQL, e}, e); + } + + // Execute the statement + stmt.execute(); + fc.proceed(); } - - // Parse hiveQL and extract input/output tables - try { - tableNames.addAll(findTableNames(hiveQL)); - } catch (Exception e) { - // If failed to parse the query, just log a warning message, but continue. - getLogger().warn("Failed to parse hiveQL: {} due to {}", new Object[]{hiveQL, e}, e); - } - - // Execute the statement - stmt.execute(); - fc.proceed(); } } diff --git a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive3-processors/src/main/java/org/apache/nifi/processors/hive/PutHive3QL.java b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive3-processors/src/main/java/org/apache/nifi/processors/hive/PutHive3QL.java index 7d137e73c1..9f24248378 100644 --- a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive3-processors/src/main/java/org/apache/nifi/processors/hive/PutHive3QL.java +++ b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive3-processors/src/main/java/org/apache/nifi/processors/hive/PutHive3QL.java @@ -231,31 +231,32 @@ public class PutHive3QL extends AbstractHive3QLProcessor { final String hiveQL = hiveQLStr.trim(); if (!StringUtils.isEmpty(hiveQL)) { - final PreparedStatement stmt = conn.prepareStatement(hiveQL); + try (final PreparedStatement stmt = conn.prepareStatement(hiveQL)) { - // Get ParameterMetadata - // Hive JDBC Doesn't support this yet: - // ParameterMetaData pmd = stmt.getParameterMetaData(); - // int paramCount = pmd.getParameterCount(); - int paramCount = StringUtils.countMatches(hiveQL, "?"); + // Get ParameterMetadata + // Hive JDBC Doesn't support this yet: + // ParameterMetaData pmd = stmt.getParameterMetaData(); + // int paramCount = pmd.getParameterCount(); + int paramCount = StringUtils.countMatches(hiveQL, "?"); - if (paramCount > 0) { - loc = setParameters(loc, stmt, paramCount, flowFile.getAttributes()); + if (paramCount > 0) { + loc = setParameters(loc, stmt, paramCount, flowFile.getAttributes()); + } + + // Parse hiveQL and extract input/output tables + try { + tableNames.addAll(findTableNames(hiveQL)); + } catch (Exception e) { + // If failed to parse the query, just log a warning message, but continue. + getLogger().warn("Failed to parse hiveQL: {} due to {}", new Object[]{hiveQL, e}, e); + } + + stmt.setQueryTimeout(context.getProperty(QUERY_TIMEOUT).evaluateAttributeExpressions(flowFile).asInteger()); + + // Execute the statement + stmt.execute(); + fc.proceed(); } - - // Parse hiveQL and extract input/output tables - try { - tableNames.addAll(findTableNames(hiveQL)); - } catch (Exception e) { - // If failed to parse the query, just log a warning message, but continue. - getLogger().warn("Failed to parse hiveQL: {} due to {}", new Object[]{hiveQL, e}, e); - } - - stmt.setQueryTimeout(context.getProperty(QUERY_TIMEOUT).evaluateAttributeExpressions(flowFile).asInteger()); - - // Execute the statement - stmt.execute(); - fc.proceed(); } } diff --git a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive_1_1-processors/src/main/java/org/apache/nifi/processors/hive/PutHive_1_1QL.java b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive_1_1-processors/src/main/java/org/apache/nifi/processors/hive/PutHive_1_1QL.java index d337f0dfba..0b62038b71 100644 --- a/nifi-nar-bundles/nifi-hive-bundle/nifi-hive_1_1-processors/src/main/java/org/apache/nifi/processors/hive/PutHive_1_1QL.java +++ b/nifi-nar-bundles/nifi-hive-bundle/nifi-hive_1_1-processors/src/main/java/org/apache/nifi/processors/hive/PutHive_1_1QL.java @@ -230,29 +230,30 @@ public class PutHive_1_1QL extends AbstractHive_1_1QLProcessor { final String hiveQL = hiveQLStr.trim(); if (!StringUtils.isEmpty(hiveQL)) { - final PreparedStatement stmt = conn.prepareStatement(hiveQL); + try (final PreparedStatement stmt = conn.prepareStatement(hiveQL)) { - // Get ParameterMetadata - // Hive JDBC Doesn't support this yet: - // ParameterMetaData pmd = stmt.getParameterMetaData(); - // int paramCount = pmd.getParameterCount(); - int paramCount = StringUtils.countMatches(hiveQL, "?"); + // Get ParameterMetadata + // Hive JDBC Doesn't support this yet: + // ParameterMetaData pmd = stmt.getParameterMetaData(); + // int paramCount = pmd.getParameterCount(); + int paramCount = StringUtils.countMatches(hiveQL, "?"); - if (paramCount > 0) { - loc = setParameters(loc, stmt, paramCount, flowFile.getAttributes()); + if (paramCount > 0) { + loc = setParameters(loc, stmt, paramCount, flowFile.getAttributes()); + } + + // Parse hiveQL and extract input/output tables + try { + tableNames.addAll(findTableNames(hiveQL)); + } catch (Exception e) { + // If failed to parse the query, just log a warning message, but continue. + getLogger().warn("Failed to parse hiveQL: {} due to {}", new Object[]{hiveQL, e}, e); + } + + // Execute the statement + stmt.execute(); + fc.proceed(); } - - // Parse hiveQL and extract input/output tables - try { - tableNames.addAll(findTableNames(hiveQL)); - } catch (Exception e) { - // If failed to parse the query, just log a warning message, but continue. - getLogger().warn("Failed to parse hiveQL: {} due to {}", new Object[]{hiveQL, e}, e); - } - - // Execute the statement - stmt.execute(); - fc.proceed(); } }