Compare commits
6 Commits
20ddc4412e
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0c737b5449 | ||
|
|
9a018b6af9 | ||
|
|
64724de96c | ||
|
|
8321032918 | ||
|
|
28b95468a3 | ||
|
|
828a7395d2 |
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.yanghuanglin</groupId>
|
<groupId>com.yanghuanglin</groupId>
|
||||||
<artifactId>seq</artifactId>
|
<artifactId>seq</artifactId>
|
||||||
<version>1.12.0</version>
|
<version>1.13.1</version>
|
||||||
<name>seq</name>
|
<name>seq</name>
|
||||||
<description>seq</description>
|
<description>seq</description>
|
||||||
<properties>
|
<properties>
|
||||||
|
|||||||
@@ -7,10 +7,12 @@ import org.springframework.core.io.InputStreamResource;
|
|||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
|
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
|
||||||
|
import org.springframework.jdbc.datasource.init.ScriptUtils;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public abstract class SequencesBase {
|
public abstract class SequencesBase {
|
||||||
protected DbType dbType;
|
protected DbType dbType;
|
||||||
@@ -61,6 +63,13 @@ public abstract class SequencesBase {
|
|||||||
}
|
}
|
||||||
InputStream inputStream = new ByteArrayInputStream(sql.getBytes(StandardCharsets.UTF_8));
|
InputStream inputStream = new ByteArrayInputStream(sql.getBytes(StandardCharsets.UTF_8));
|
||||||
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(new InputStreamResource(inputStream));
|
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(new InputStreamResource(inputStream));
|
||||||
|
if (Objects.equals(dbType.getSeries(), DbType.DM_DBMS.getSeries()) && fileName.endsWith("trigger.sql")) {
|
||||||
|
// 触发器文件不要通过;分隔,整个文件一起执行
|
||||||
|
databasePopulator.setSeparator(ScriptUtils.EOF_STATEMENT_SEPARATOR);
|
||||||
|
} else if (Objects.equals(dbType.getSeries(), DbType.PostgreSQL.getSeries()) && fileName.endsWith("function.sql")) {
|
||||||
|
// 函数文件不要通过;分隔,整个文件一起执行
|
||||||
|
databasePopulator.setSeparator(ScriptUtils.EOF_STATEMENT_SEPARATOR);
|
||||||
|
}
|
||||||
databasePopulator.execute(dataSource);
|
databasePopulator.execute(dataSource);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
System.err.println("执行SQL文件" + fileName + "失败");
|
System.err.println("执行SQL文件" + fileName + "失败");
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ import com.yanghuanglin.seq.po.Sequences;
|
|||||||
import org.springframework.dao.EmptyResultDataAccessException;
|
import org.springframework.dao.EmptyResultDataAccessException;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author yanghuanglin
|
* @author yanghuanglin
|
||||||
@@ -56,5 +58,11 @@ public class SequencesDaoImpl extends SequencesBase implements SequencesDao {
|
|||||||
@Override
|
@Override
|
||||||
public void createTable() {
|
public void createTable() {
|
||||||
this.createTableByFile("create_table_sequences.sql");
|
this.createTableByFile("create_table_sequences.sql");
|
||||||
|
if (Objects.equals(dbType.getSeries(), DbType.DM_DBMS.getSeries())) {
|
||||||
|
this.createTableByFile("create_table_sequences_trigger.sql");
|
||||||
|
} else if (Objects.equals(dbType.getSeries(), DbType.PostgreSQL.getSeries())) {
|
||||||
|
this.createTableByFile("create_table_sequences_function.sql");
|
||||||
|
this.createTableByFile("create_table_sequences_trigger.sql");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
8
src/main/resources/dm/create_table_sequences_trigger.sql
Normal file
8
src/main/resources/dm/create_table_sequences_trigger.sql
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
CREATE OR REPLACE TRIGGER "SEQUENCES_UPDATE_TIME"
|
||||||
|
BEFORE UPDATE
|
||||||
|
ON "sequences"
|
||||||
|
referencing OLD ROW AS "OLD" NEW ROW AS "NEW"
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
:NEW."UPDATE_TIME" := CURRENT_TIMESTAMP;
|
||||||
|
END;
|
||||||
@@ -3,6 +3,6 @@ CREATE TABLE IF NOT EXISTS `sequences`
|
|||||||
`key` VARCHAR(64) NOT NULL COMMENT '序号英文名称',
|
`key` VARCHAR(64) NOT NULL COMMENT '序号英文名称',
|
||||||
`type` VARCHAR(64) NOT NULL COMMENT '序号类型',
|
`type` VARCHAR(64) NOT NULL COMMENT '序号类型',
|
||||||
`seq` BIGINT(20) NOT NULL COMMENT '已使用到的序号',
|
`seq` BIGINT(20) NOT NULL COMMENT '已使用到的序号',
|
||||||
`update_time` DATETIME NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '最后使用时间',
|
`update_time` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后使用时间',
|
||||||
PRIMARY KEY (`key`, `type`)
|
PRIMARY KEY (`key`, `type`)
|
||||||
) COMMENT '当前序号表';
|
) COMMENT '当前序号表';
|
||||||
@@ -11,22 +11,3 @@ COMMENT ON COLUMN "sequences"."key" IS '序号英文名称';
|
|||||||
COMMENT ON COLUMN "sequences"."type" IS '序号类型';
|
COMMENT ON COLUMN "sequences"."type" IS '序号类型';
|
||||||
COMMENT ON COLUMN "sequences"."seq" IS '已使用到的序号';
|
COMMENT ON COLUMN "sequences"."seq" IS '已使用到的序号';
|
||||||
COMMENT ON COLUMN "sequences"."update_time" IS '最后使用时间';
|
COMMENT ON COLUMN "sequences"."update_time" IS '最后使用时间';
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
触发器函数,用户更新update_time字段
|
|
||||||
*/
|
|
||||||
CREATE OR REPLACE FUNCTION SEQUENCES_UPDATE_TIME() RETURNS TRIGGER AS $$
|
|
||||||
BEGIN
|
|
||||||
NEW."update_time" := current_timestamp;
|
|
||||||
RETURN NEW;
|
|
||||||
END;
|
|
||||||
$$ LANGUAGE plpgsql;
|
|
||||||
|
|
||||||
/*
|
|
||||||
@触发器设置,功能:自动记录更新时间
|
|
||||||
@触发器名为 SEQUENCES_UPDATE_TIME
|
|
||||||
@触发器执行范围为每行生效
|
|
||||||
*/
|
|
||||||
DROP TRIGGER IF EXISTS SEQUENCES_UPDATE_TIME ON "sequences" CASCADE;
|
|
||||||
CREATE TRIGGER SEQUENCES_UPDATE_TIME BEFORE UPDATE ON "sequences" FOR EACH ROW EXECUTE FUNCTION SEQUENCES_UPDATE_TIME();
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
CREATE OR REPLACE FUNCTION SEQUENCES_UPDATE_TIME() RETURNS TRIGGER AS $$
|
||||||
|
BEGIN
|
||||||
|
NEW."update_time" := current_timestamp;
|
||||||
|
RETURN NEW;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
DROP TRIGGER IF EXISTS SEQUENCES_UPDATE_TIME ON "sequences" CASCADE;
|
||||||
|
CREATE TRIGGER SEQUENCES_UPDATE_TIME BEFORE INSERT OR UPDATE ON "sequences" FOR EACH ROW EXECUTE PROCEDURE SEQUENCES_UPDATE_TIME();
|
||||||
Reference in New Issue
Block a user