From d0e164c23bed9e936e28cca5272aa88888d7fdcf Mon Sep 17 00:00:00 2001 From: Francesco Nigro Date: Tue, 3 Apr 2018 10:11:04 +0200 Subject: [PATCH] ARTEMIS-1653 Allow database tables to be created externally The previous commit about this feature wasn't using the right ResultSet to count the rows in a table. Additional checks have been added to: - verify that the first SQL statement is a CREATE TABLE - log if the existing rows are less than the expected ones --- .../jdbc/store/drivers/AbstractJDBCDriver.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/AbstractJDBCDriver.java b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/AbstractJDBCDriver.java index b0be3aedfa6..899fdf5eec4 100644 --- a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/AbstractJDBCDriver.java +++ b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/AbstractJDBCDriver.java @@ -191,9 +191,18 @@ private void createTableIfNotExists(String tableName, String... sqls) throws SQL } else { try (Statement statement = connection.createStatement(); ResultSet cntRs = statement.executeQuery(sqlProvider.getCountJournalRecordsSQL())) { - if (rs.next() && rs.getInt(1) > 0) { + int rows; + if (cntRs.next() && (rows = cntRs.getInt(1)) > 0) { logger.tracef("Table %s did exist but is not empty. Skipping initialization.", tableName); + if (logger.isDebugEnabled()) { + final long expectedRows = Stream.of(sqls).map(String::toUpperCase).filter(sql -> sql.contains("INSERT INTO")).count(); + if (rows < expectedRows) { + logger.debug("Table " + tableName + " was expected to contain " + expectedRows + " rows while it has " + rows + " rows."); + } + } + return; } else { + assert sqls[0].toUpperCase().contains("CREATE TABLE") : "The first SQL statement must be a CREATE TABLE"; sqls = Arrays.copyOfRange(sqls, 1, sqls.length); } }