diff --git a/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesBase.java b/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesBase.java index eb3013a..4b92e7e 100644 --- a/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesBase.java +++ b/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesBase.java @@ -7,10 +7,12 @@ import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.Resource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; +import org.springframework.jdbc.datasource.init.ScriptUtils; import javax.sql.DataSource; import java.io.*; import java.nio.charset.StandardCharsets; +import java.util.Objects; public abstract class SequencesBase { protected DbType dbType; @@ -61,6 +63,10 @@ public abstract class SequencesBase { } InputStream inputStream = new ByteArrayInputStream(sql.getBytes(StandardCharsets.UTF_8)); ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(new InputStreamResource(inputStream)); + if (Objects.equals(dbType.getSeries(), DbType.PostgreSQL.getSeries()) && fileName.endsWith("function.sql")) { + // 函数文件只能有一个函数,并且函数文件不要通过;分隔 + databasePopulator.setSeparator(ScriptUtils.EOF_STATEMENT_SEPARATOR); + } databasePopulator.execute(dataSource); } catch (IOException e) { System.err.println("执行SQL文件" + fileName + "失败"); diff --git a/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesDaoImpl.java b/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesDaoImpl.java index c50d720..07af529 100644 --- a/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesDaoImpl.java +++ b/src/main/java/com/yanghuanglin/seq/dao/impl/SequencesDaoImpl.java @@ -7,6 +7,8 @@ import com.yanghuanglin.seq.po.Sequences; import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.jdbc.core.JdbcTemplate; +import java.util.Objects; + /** * @author yanghuanglin @@ -56,5 +58,9 @@ public class SequencesDaoImpl extends SequencesBase implements SequencesDao { @Override public void createTable() { this.createTableByFile("create_table_sequences.sql"); + if (Objects.equals(dbType.getSeries(), DbType.PostgreSQL.getSeries())) { + this.createTableByFile("create_table_sequences_function.sql"); + this.createTableByFile("create_table_sequences_trigger.sql"); + } } } diff --git a/src/main/resources/pgsql/create_table_sequences.sql b/src/main/resources/pgsql/create_table_sequences.sql index 7bc0822..0dc0268 100644 --- a/src/main/resources/pgsql/create_table_sequences.sql +++ b/src/main/resources/pgsql/create_table_sequences.sql @@ -10,23 +10,4 @@ COMMENT ON TABLE "sequences" IS '当前序号表'; COMMENT ON COLUMN "sequences"."key" IS '序号英文名称'; COMMENT ON COLUMN "sequences"."type" IS '序号类型'; COMMENT ON COLUMN "sequences"."seq" 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 INSERT OR UPDATE ON "sequences" FOR EACH ROW EXECUTE PROCEDURE SEQUENCES_UPDATE_TIME(); \ No newline at end of file +COMMENT ON COLUMN "sequences"."update_time" IS '最后使用时间'; \ No newline at end of file diff --git a/src/main/resources/pgsql/create_table_sequences_function.sql b/src/main/resources/pgsql/create_table_sequences_function.sql new file mode 100644 index 0000000..92eae24 --- /dev/null +++ b/src/main/resources/pgsql/create_table_sequences_function.sql @@ -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; \ No newline at end of file diff --git a/src/main/resources/pgsql/create_table_sequences_trigger.sql b/src/main/resources/pgsql/create_table_sequences_trigger.sql new file mode 100644 index 0000000..29576b9 --- /dev/null +++ b/src/main/resources/pgsql/create_table_sequences_trigger.sql @@ -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(); \ No newline at end of file