aboutsummaryrefslogtreecommitdiff
path: root/juick-server-jdbc/src/main/java/com/juick/database
diff options
context:
space:
mode:
Diffstat (limited to 'juick-server-jdbc/src/main/java/com/juick/database')
-rw-r--r--juick-server-jdbc/src/main/java/com/juick/database/MySqlUpdater.java153
1 files changed, 0 insertions, 153 deletions
diff --git a/juick-server-jdbc/src/main/java/com/juick/database/MySqlUpdater.java b/juick-server-jdbc/src/main/java/com/juick/database/MySqlUpdater.java
deleted file mode 100644
index 69cde40b..00000000
--- a/juick-server-jdbc/src/main/java/com/juick/database/MySqlUpdater.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (C) 2008-2017, Juick
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-package com.juick.database;
-
-import org.apache.commons.codec.CharEncoding;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.transaction.PlatformTransactionManager;
-import org.springframework.transaction.support.TransactionTemplate;
-import org.springframework.util.Assert;
-
-import javax.annotation.PostConstruct;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.Supplier;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import static org.springframework.transaction.TransactionDefinition.PROPAGATION_REQUIRED;
-
-/**
- * Created by aalexeev on 12/13/16.
- */
-public class MySqlUpdater {
- private static final Pattern UPDATE_PATTERN = Pattern.compile(
- "update\\s+(version|`version`)\\s+set\\s+(version|`version`)\\s+=\\s*(\\d+)",
- Pattern.CASE_INSENSITIVE);
-
- private final Logger logger = LoggerFactory.getLogger(getClass());
-
- private final JdbcTemplate jdbcTemplate;
- private final TransactionTemplate transactionTemplate;
- private final String updateSqlResource;
-
-
- public MySqlUpdater(JdbcTemplate jdbcTemplate, PlatformTransactionManager transactionManager, String updateSqlResource) {
- Assert.notNull(jdbcTemplate, "JdbcTemplate must be initialized");
- Assert.notNull(transactionManager, "PlatformTransactionManager must be initialized");
- Assert.notNull(updateSqlResource, "sqlResource must be initialized");
-
- this.jdbcTemplate = jdbcTemplate;
- this.transactionTemplate = new TransactionTemplate(transactionManager);
- this.updateSqlResource = updateSqlResource;
- }
-
- @PostConstruct
- public void init() {
- try (
- InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(updateSqlResource);
- ) {
- if (is != null) {
- String content = IOUtils.toString(is, CharEncoding.UTF_8);
- if (StringUtils.isNotEmpty(content)) {
- String[] sqlArray = content.split(";");
- if (sqlArray.length > 0) {
- List<String> sqlList = new ArrayList<>(sqlArray.length);
- for (String sql : sqlArray)
- if (!sql.isEmpty()) {
- String sqlTrimmed = sql.trim();
- if (!sqlTrimmed.isEmpty())
- sqlList.add(sqlTrimmed);
- }
- if (!sqlList.isEmpty())
- processingSql(sqlList);
- }
- }
- }
- } catch (Exception e) {
- logger.error("MySqlUpdater initialization exception", e);
- }
- }
-
- private void processingSql(final List<String> sqls) {
- long currentDbVersion = getSingleResult(this::getVersionRaw);
- long actualVersion;
-
- List<String> changesSql = new ArrayList<>();
-
- for (String sql : sqls) {
- changesSql.add(sql);
-
- Matcher m = UPDATE_PATTERN.matcher(sql);
- if (m.matches()) {
- actualVersion = Long.valueOf(m.group(3));
-
- if (actualVersion > currentDbVersion) {
- updateInTransaction(changesSql);
- currentDbVersion = actualVersion;
- }
- changesSql.clear();
- }
- }
- }
-
- private void updateInTransaction(final List<String> sqls) {
- transactionTemplate.setReadOnly(false);
- transactionTemplate.setPropagationBehavior(PROPAGATION_REQUIRED);
- transactionTemplate.execute(status -> {
- for (String sql : sqls)
- jdbcTemplate.execute(sql);
- return 0;
- });
- }
-
- private <T> T getSingleResult(Supplier<T> supplier) {
- transactionTemplate.setReadOnly(true);
- transactionTemplate.setPropagationBehavior(PROPAGATION_REQUIRED);
-
- return transactionTemplate.execute(status -> supplier.get());
- }
-
- private long getVersionRaw() {
- int cnt = jdbcTemplate.query(
- "SELECT count(*) FROM information_schema.tables WHERE table_schema = ? AND table_name = ?",
- rs -> {
- int result = 0;
- if (rs.next())
- result = rs.getInt(1);
- return result;
- },
- "juick", "version");
-
- long version = 0l;
-
- if (cnt == 1) {
- List<Long> list = jdbcTemplate.queryForList("select version from version", Long.class);
- if (!list.isEmpty())
- version = list.get(0);
- }
-
- return version;
- }
-}