DataGear 變更部署數據庫為SQL Server填坑指南(含轉寫后的SQL server代碼及SQL server配置文件)


1. 引言

DataGear默認使用Derby數據庫作為系統的元數據庫,至於待分析的業務庫則支持MySQL、SQL Server等。
Derby數據庫足以支持系統的數據集、圖表、看板等對象的管理,且不需要安裝數據庫服務,但由於目前DataGear不支持單點登錄集成,因此項目上為了便於用戶認證信息的統一管理,以及DataGear數據庫的備份等,將Derby變更為SQL Server,與待分析的業務數據庫一致。
在變更操作過程中,參考了DataGear官方說明,操作時遇到一些坑,記錄下來分享與大家。
不少內容是引用官方文檔的,直接抄來了。
datagear架構圖
gitee地址:
https://gitee.com/datagear/datagear

2. 配置數據庫鏈接

在config/application.properties添加datasource.driverClassName、datasource.url、datasource.username、datasource.password配置項,配置新數據庫連接。

  • MySQL
datasource.driverClassName=com.mysql.cj.jdbc.Driver
datasource.url=jdbc:mysql://localhost:3306/datagear
datasource.username=datagear
datasource.password=datagear
  • SQL Server
datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
datasource.url=jdbc:sqlserver://192.168.1.30:1433;SelectMethod=cursor;DatabaseName=datagear
datasource.username=datagear
datasource.password=datagear

3. 引入數據庫驅動

在根目錄下新建lib包,將JDBC驅動(sqljdbc4-4.0.jar)放入。
修改startup.bat為

java -Xbootclasspath/a:lib/sqljdbc4-4.0.jar -jar datagear-2.4.0.jar

4. 手動初始化數據庫

此時運行startup,datagear將會按照配置的鏈接訪問數據庫,如果數據庫配置以及驅動無誤,則會進入下一步。
接着datagear檢測到沒有數據庫,此時會自動創建數據庫,使用的SQL是打包在jar文件中的,源碼庫路徑為datagear-management/src/main/resources/org/datagear/management/ddl/datagear.sql。此SQL為Derby數據庫,因此將執行失敗。
擴展:可以用SQL server等數據庫腳本替換了源碼sql並打包,分發到項目上,項目上直接執行即可創建數據庫,類似於Activity等的部署。
接着需要先改寫Derby建庫腳本為SQL server,改寫后執行SQL,然后設置版本號,然后運行startup.bat即可。
坑:如果是新環境,DATAGEAR_VERSION(版本)表中的記錄為空,此時按照官方說明執行SQL設置版本號將不起效。

UPDATE DATAGEAR_VERSION SET VERSION_VALUE='當前版本號'

或許Derby支持數據不存在則insert的update騷操作,對於SQL server需要insert下。
此坑造成的效果時,啟動時dategear查詢到當前已有數據庫,但版本為null,因此需要升級,且從頭升級,於是執行打包的SQL。

5. 改寫SQL

DataGear的(升級)SQL腳本非常漂亮,每個版本不論是否有SQL更新,都寫有注釋,供手工和自動執行時參考。

-----------------------------------------
--version[1.6.1], DO NOT EDIT THIS LINE!
-----------------------------------------

如果是新環境,則需要從頭執行到尾,如果是升級,則找到起始版本執行后邊的SQL即可。

以下列舉Derby轉SQL server的幾個常見操作。

  • TIMESTAMP,巨坑,SQL server也有該數據類型,但意義不一樣,改為datetime
  • CURRENT_TIMESTAMP,當前時間,修改為(getdate()),獲取當前時間
  • 函數按照SQLserver語法改寫,變量填寫@即可。函數實現Derby不支持的replace、取余操作,datagear采用了java擴展,SQL server直接用系統函數、操作符即可,不需要.net擴展
  • DATAGEAR_REPLACEREGEX,按官方說明,不必理睬即可,該正則表達式替換新版本中已廢棄
  • RENAME COLUMN ,重命名列,按照SQL server語法替換
  • RENAME TABLE ,重命名表,按照SQL server語法替換
  • 表中加字段,ADD COLUMN 去掉column
  • ALTER COLUMN DS_TYPE SET NOT NULL;,修改列非空,SQL server需要找到原來的類型,一並修改。
  • VARCHAR(10000),SQL server支持到8K,修改為VARCHAR(8000)

修改后的SQL Server版SQL為:

-----------------------------------------
--version[1.0.0], DO NOT EDIT THIS LINE!
-----------------------------------------

if not exists (select * from sysobjects where name='DATAGEAR_VERSION' and xtype='U')
CREATE TABLE DATAGEAR_VERSION 
(
	VERSION_MAJOR VARCHAR(50),
	VERSION_MINOR VARCHAR(50),
	VERSION_REVISION VARCHAR(50),
	VERSION_BUILD VARCHAR(50)
);
go
if not exists (select * from sysobjects where name='DATAGEAR_USER' and xtype='U')
CREATE TABLE DATAGEAR_USER
(
	USER_ID VARCHAR(50) NOT NULL,
	USER_NAME VARCHAR(50) NOT NULL,
	USER_PASSWORD VARCHAR(200) NOT NULL,
	USER_REAL_NAME VARCHAR(100),
	USER_EMAIL VARCHAR(200),
	USER_IS_ADMIN VARCHAR(20),
	USER_CREATE_TIME DATETIME,
	PRIMARY KEY (USER_ID),
	UNIQUE (USER_NAME)
);
go
--alter table DATAGEAR_USER alter column USER_CREATE_TIME datetime;
--無法更改列 'USER_CREATE_TIME',因為它是 'timestamp'。
--alter table DATAGEAR_USER drop column USER_CREATE_TIME;
--alter table DATAGEAR_USER add USER_CREATE_TIME DATETIME;


--the password is 'admin'
INSERT INTO DATAGEAR_USER VALUES('admin', 'admin', '4c6d8d058a4db956660f0ee51fcb515f93471a086fc676bfb71ba2ceece5bf4702c61cefab3fa54b', '', '', 'true', default);

if not exists (select * from sysobjects where name='DATAGEAR_SCHEMA' and xtype='U')
CREATE TABLE DATAGEAR_SCHEMA
(
	SCHEMA_ID VARCHAR(50) NOT NULL,
	SCHEMA_TITLE VARCHAR(100) NOT NULL,
	SCHEMA_URL VARCHAR(200) NOT NULL,
	SCHEMA_USER VARCHAR(200),
	SCHEMA_PASSWORD VARCHAR(200),
	SCHEMA_CREATE_USER_ID VARCHAR(50),
	SCHEMA_CREATE_TIME DATETIME,
	SCHEMA_SHARED VARCHAR(20),
	DRIVER_ENTITY_ID VARCHAR(100),
	PRIMARY KEY (SCHEMA_ID)
);
--alter table DATAGEAR_SCHEMA drop column SCHEMA_CREATE_TIME;
--alter table DATAGEAR_SCHEMA add SCHEMA_CREATE_TIME DATETIME;

-----------------------------------------
--version[1.1.0], DO NOT EDIT THIS LINE!
-----------------------------------------



-----------------------------------------
--version[1.1.1], DO NOT EDIT THIS LINE!
-----------------------------------------



-----------------------------------------
--version[1.2.0], DO NOT EDIT THIS LINE!
-----------------------------------------



-----------------------------------------
--version[1.3.0], DO NOT EDIT THIS LINE!
-----------------------------------------



-----------------------------------------
--version[1.4.0], DO NOT EDIT THIS LINE!
-----------------------------------------

if not exists (select * from sysobjects where name='DATAGEAR_ROLE' and xtype='U')
CREATE TABLE DATAGEAR_ROLE
(
	ROLE_ID VARCHAR(50) NOT NULL,
	ROLE_NAME VARCHAR(100) NOT NULL,
	ROLE_DESCRIPTION VARCHAR(200),
	ROLE_ENABLED VARCHAR(10) NOT NULL,
	ROLE_CREATE_TIME DATETIME,
	PRIMARY KEY (ROLE_ID)
);
--alter table DATAGEAR_ROLE drop column ROLE_CREATE_TIME;
--alter table DATAGEAR_ROLE add ROLE_CREATE_TIME DATETIME;

if not exists (select * from sysobjects where name='DATAGEAR_ROLE_USER' and xtype='U')
CREATE TABLE DATAGEAR_ROLE_USER
(
	RU_ID VARCHAR(50) NOT NULL,
	RU_ROLE_ID VARCHAR(50) NOT NULL,
	RU_USER_ID VARCHAR(50) NOT NULL,
	PRIMARY KEY (RU_ID)
);

ALTER TABLE DATAGEAR_ROLE_USER ADD FOREIGN KEY (RU_ROLE_ID) REFERENCES DATAGEAR_ROLE (ROLE_ID) ON DELETE CASCADE;

ALTER TABLE DATAGEAR_ROLE_USER ADD FOREIGN KEY (RU_USER_ID) REFERENCES DATAGEAR_USER (USER_ID) ON DELETE CASCADE;

ALTER TABLE DATAGEAR_ROLE_USER ADD CONSTRAINT UK_RU_ROLE_USER_ID UNIQUE (RU_ROLE_ID, RU_USER_ID);

if not exists (select * from sysobjects where name='DATAGEAR_AUTHORIZATION' and xtype='U')
CREATE TABLE DATAGEAR_AUTHORIZATION
(
	AUTH_ID VARCHAR(50) NOT NULL,
	AUTH_RESOURCE VARCHAR(200) NOT NULL,
	AUTH_RESOURCE_TYPE VARCHAR(50) NOT NULL,
	AUTH_PRINCIPAL VARCHAR(200) NOT NULL,
	AUTH_PRINCIPAL_TYPE VARCHAR(50) NOT NULL,
	AUTH_PERMISSION SMALLINT NOT NULL,
	AUTH_ENABLED VARCHAR(10) NOT NULL,
	AUTH_CREATE_TIME DATETIME,
	AUTH_CREATE_USER_ID VARCHAR(50),
	PRIMARY KEY (AUTH_ID)
);
--alter table DATAGEAR_AUTHORIZATION drop column AUTH_CREATE_TIME;
--alter table DATAGEAR_AUTHORIZATION add AUTH_CREATE_TIME DATETIME;
go
--自定義REPLACE函數
--srcStr    原始字符串
--oldStr    要替換的舊子串
--newStr    要替換的新子串
CREATE FUNCTION DATAGEAR_REPLACE(@srcStr VARCHAR(500), @oldStr VARCHAR(100), @newStr VARCHAR(100)) RETURNS VARCHAR(500)
as
begin
--PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'org.datagear.management.util.DerbyFunctionSupport.replace';
	return replace(@srcStr,@oldStr,@newStr);
end;
go

if not exists (select * from sysobjects where name='DATAGEAR_SQL_HISTORY' and xtype='U')
CREATE TABLE DATAGEAR_SQL_HISTORY
(
	SQLHIS_ID VARCHAR(50) NOT NULL,
	SQLHIS_SQL VARCHAR(5000) NOT NULL,
	SQLHIS_SCHEMA_ID VARCHAR(50) NOT NULL,
	SQLHIS_USER_ID VARCHAR(50) NOT NULL,
	SQLHIS_CREATE_TIME DATETIME  DEFAULT GETDATE(),
	PRIMARY KEY (SQLHIS_ID)
);
--alter table DATAGEAR_SQL_HISTORY drop column SQLHIS_CREATE_TIME;
--alter table DATAGEAR_SQL_HISTORY add SQLHIS_CREATE_TIME DATETIME;

ALTER TABLE DATAGEAR_SQL_HISTORY ADD FOREIGN KEY (SQLHIS_SCHEMA_ID) REFERENCES DATAGEAR_SCHEMA (SCHEMA_ID) ON DELETE CASCADE;


-----------------------------------------
--version[1.5.0], DO NOT EDIT THIS LINE!
-----------------------------------------

--SQL數據集
if not exists (select * from sysobjects where name='DATAGEAR_SQL_DATA_SET' and xtype='U')
CREATE TABLE DATAGEAR_SQL_DATA_SET
(
	DS_ID VARCHAR(50) NOT NULL,
	DS_NAME VARCHAR(100) NOT NULL,
	DS_SCHEMA_ID VARCHAR(50) NOT NULL,
	DS_SQL VARCHAR(1000) NOT NULL,
	DS_CREATE_USER_ID VARCHAR(50),
	DS_CREATE_TIME DATETIME,
	PRIMARY KEY (DS_ID)
);
-- alter table DATAGEAR_DATA_SET drop column DS_CREATE_TIME;
-- alter table DATAGEAR_DATA_SET add DS_CREATE_TIME DATETIME;

--該字段后需要刪除,約束將限制其刪除
--ALTER TABLE DATAGEAR_SQL_DATA_SET ADD FOREIGN KEY (DS_SCHEMA_ID) REFERENCES DATAGEAR_SCHEMA (SCHEMA_ID);

--數據集屬性
if not exists (select * from sysobjects where name='DATAGEAR_DATA_SET_PROP' and xtype='U')
CREATE TABLE DATAGEAR_DATA_SET_PROP
(
	PROP_DS_ID VARCHAR(50) NOT NULL,
	PROP_NAME VARCHAR(100) NOT NULL,
	PROP_TYPE VARCHAR(50) NOT NULL,
	PROP_LABEL VARCHAR(100),
	PROP_ORDER INTEGER
);

ALTER TABLE DATAGEAR_DATA_SET_PROP ADD FOREIGN KEY (PROP_DS_ID) REFERENCES DATAGEAR_SQL_DATA_SET (DS_ID) ON DELETE CASCADE;

ALTER TABLE DATAGEAR_DATA_SET_PROP ADD CONSTRAINT UK_DS_PROP_DS_ID_NAME UNIQUE (PROP_DS_ID, PROP_NAME);

--數據集參數
if not exists (select * from sysobjects where name='DATAGEAR_DATA_SET_PAR' and xtype='U')
CREATE TABLE DATAGEAR_DATA_SET_PAR
(
	PAR_DS_ID VARCHAR(50) NOT NULL,
	PAR_NAME VARCHAR(100) NOT NULL,
	PAR_TYPE VARCHAR(100) NOT NULL,
	PAR_REQUIRED VARCHAR(10),
	PAR_DEFAULT_VALUE VARCHAR(200),
	PAR_ORDER INTEGER
);

ALTER TABLE DATAGEAR_DATA_SET_PAR ADD FOREIGN KEY (PAR_DS_ID) REFERENCES DATAGEAR_SQL_DATA_SET (DS_ID) ON DELETE CASCADE; 

ALTER TABLE DATAGEAR_DATA_SET_PAR ADD CONSTRAINT UK_DS_PAR_DS_ID_NAME UNIQUE (PAR_DS_ID, PAR_NAME);

--數據集輸出
if not exists (select * from sysobjects where name='DATAGEAR_DATA_SET_EXPT' and xtype='U')
CREATE TABLE DATAGEAR_DATA_SET_EXPT
(
	EXPT_DS_ID VARCHAR(50) NOT NULL,
	EXPT_NAME VARCHAR(100) NOT NULL,
	EXPT_TYPE VARCHAR(50) NOT NULL,
	EXPT_ORDER INTEGER
);

ALTER TABLE DATAGEAR_DATA_SET_EXPT ADD FOREIGN KEY (EXPT_DS_ID) REFERENCES DATAGEAR_SQL_DATA_SET (DS_ID) ON DELETE CASCADE;

ALTER TABLE DATAGEAR_DATA_SET_EXPT ADD CONSTRAINT UK_DS_EXPT_DS_ID_NAME UNIQUE (EXPT_DS_ID, EXPT_NAME);

--圖表
if not exists (select * from sysobjects where name='DATAGEAR_HTML_CHART_WIDGET' and xtype='U')
CREATE TABLE DATAGEAR_HTML_CHART_WIDGET
(
	HCW_ID VARCHAR(50) NOT NULL,
	HCW_NAME VARCHAR(100) NOT NULL,
	HCW_PLUGIN_ID VARCHAR(100) NOT NULL,
	HCW_UPDATE_INTERVAL INTEGER,
	HCW_CREATE_USER_ID VARCHAR(50),
	HCW_CREATE_TIME DATETIME,
	PRIMARY KEY (HCW_ID)
);
-- alter table DATAGEAR_HTML_CHART_WIDGET drop column HCW_CREATE_TIME;
-- alter table DATAGEAR_HTML_CHART_WIDGET add HCW_CREATE_TIME DATETIME;

--圖表-數據集信息
if not exists (select * from sysobjects where name='DATAGEAR_HCW_DS' and xtype='U')
CREATE TABLE DATAGEAR_HCW_DS
(
	HCW_ID VARCHAR(50) NOT NULL,
	DS_ID VARCHAR(50) NOT NULL,
	DS_PROPERTY_SIGNS VARCHAR(500),
	DS_ORDER INTEGER
);

ALTER TABLE DATAGEAR_HCW_DS ADD FOREIGN KEY (HCW_ID) REFERENCES DATAGEAR_HTML_CHART_WIDGET (HCW_ID) ON DELETE CASCADE;

ALTER TABLE DATAGEAR_HCW_DS ADD FOREIGN KEY (DS_ID) REFERENCES DATAGEAR_SQL_DATA_SET (DS_ID) ON DELETE CASCADE;

--看板
if not exists (select * from sysobjects where name='DATAGEAR_HTML_DASHBOARD' and xtype='U')
CREATE TABLE DATAGEAR_HTML_DASHBOARD
(
	HD_ID VARCHAR(50) NOT NULL,
	HD_NAME VARCHAR(100) NOT NULL,
	HD_TEMPLATE VARCHAR(100) NOT NULL,
	HD_TEMPLATE_ENCODING VARCHAR(50),
	HD_CREATE_USER_ID VARCHAR(50),
	HD_CREATE_TIME DATETIME,
	PRIMARY KEY (HD_ID)
);
-- alter table DATAGEAR_HTML_DASHBOARD drop column HD_CREATE_TIME;
-- alter table DATAGEAR_HTML_DASHBOARD add HD_CREATE_TIME DATETIME;

-----------------------------------------
--version[1.6.0], DO NOT EDIT THIS LINE!
-----------------------------------------

--ALTER TABLE DATAGEAR_HTML_DASHBOARD ALTER COLUMN HD_TEMPLATE SET DATA TYPE VARCHAR(500);

-----------------------------------------
--version[1.6.1], DO NOT EDIT THIS LINE!
-----------------------------------------

-----------------------------------------
--version[1.7.0], DO NOT EDIT THIS LINE!
-----------------------------------------

--自定義正則REPLACE函數,目前僅用於下面修改數據標記
--srcStr  原始字符串
--oldStr  要替換的正則表達式
--newStr  要替換的新子串
--CREATE FUNCTION DATAGEAR_REPLACEREGEX(srcStr VARCHAR(500), oldStr VARCHAR(100), newStr VARCHAR(100)) RETURNS VARCHAR(500)
--PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'org.datagear.management.util.DerbyFunctionSupport.replaceRegex';
 
--擴充SQL字段
ALTER TABLE DATAGEAR_SQL_DATA_SET ALTER COLUMN DS_SQL VARCHAR(8000);


-----------------------------------------
--version[1.8.0], DO NOT EDIT THIS LINE!
-----------------------------------------

--默認值字段改為描述字段
--RENAME COLUMN DATAGEAR_DATA_SET_PAR.PAR_DEFAULT_VALUE TO PAR_DESC;
exec sp_rename 'DATAGEAR_DATA_SET_PAR.PAR_DEFAULT_VALUE','PAR_DESC' 

--移除數據集輸出項表
DROP TABLE DATAGEAR_DATA_SET_EXPT;

--擴充圖表數據集數據標記列
ALTER TABLE DATAGEAR_HCW_DS ALTER COLUMN DS_PROPERTY_SIGNS VARCHAR(1000);

--添加圖表數據集別名列
ALTER TABLE DATAGEAR_HCW_DS ADD DS_ALIAS VARCHAR(100);

--添加圖表數據集參數值列
ALTER TABLE DATAGEAR_HCW_DS ADD DS_PARAM_VALUES VARCHAR(1000);


-----------------------------------------
--version[1.8.1], DO NOT EDIT THIS LINE!
-----------------------------------------



-----------------------------------------
--version[1.9.0], DO NOT EDIT THIS LINE!
-----------------------------------------
 
-----------------------------------------
--version[1.10.0], DO NOT EDIT THIS LINE!
-----------------------------------------

--添加數據集參數輸入框類型
ALTER TABLE DATAGEAR_DATA_SET_PAR ADD PAR_INPUT_TYPE VARCHAR(50);

--添加數據集參數輸入框載荷
ALTER TABLE DATAGEAR_DATA_SET_PAR ADD PAR_INPUT_PAYLOAD VARCHAR(1000);


-----------------------------------------
--version[1.10.1], DO NOT EDIT THIS LINE!
-----------------------------------------

-----------------------------------------
--version[1.11.0], DO NOT EDIT THIS LINE!
-----------------------------------------

--改為通用數據集
--RENAME TABLE DATAGEAR_SQL_DATA_SET TO DATAGEAR_DATA_SET;
exec sp_rename 'DATAGEAR_SQL_DATA_SET','DATAGEAR_DATA_SET';

--新建SQL數據集
if not exists (select * from sysobjects where name='DATAGEAR_DATA_SET_SQL' and xtype='U')
CREATE TABLE DATAGEAR_DATA_SET_SQL
(
	DS_ID VARCHAR(50) NOT NULL,
	DS_SCHEMA_ID VARCHAR(50) NOT NULL,
	DS_SQL VARCHAR(8000) NOT NULL,
	PRIMARY KEY (DS_ID)
);

--遷移SQL數據集數據
INSERT INTO DATAGEAR_DATA_SET_SQL (DS_ID, DS_SCHEMA_ID, DS_SQL) SELECT DS_ID, DS_SCHEMA_ID, DS_SQL FROM DATAGEAR_DATA_SET;

--添加約束
ALTER TABLE DATAGEAR_DATA_SET_SQL ADD FOREIGN KEY (DS_SCHEMA_ID) REFERENCES DATAGEAR_SCHEMA (SCHEMA_ID);

--引入表 'DATAGEAR_DATA_SET_SQL' 可能會導致循環或多重級聯路徑。請指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 約束
ALTER TABLE DATAGEAR_DATA_SET_SQL ADD FOREIGN KEY (DS_ID) REFERENCES DATAGEAR_DATA_SET (DS_ID) ON DELETE CASCADE;
--ALTER TABLE DATAGEAR_DATA_SET_SQL ADD FOREIGN KEY (DS_ID) REFERENCES DATAGEAR_DATA_SET (DS_ID) ON DELETE NO ACTION;

--移除通用數據集中的SQL數據集列
--需要先移除外鍵約束,然后刪除列,Derby可能直接可以刪除
--ALTER TABLE DATAGEAR_DATA_SET DROP CONSTRAINT [FK__DATAGEAR___DS_SC__04459E07];
ALTER TABLE DATAGEAR_DATA_SET DROP COLUMN DS_SCHEMA_ID;

ALTER TABLE DATAGEAR_DATA_SET DROP COLUMN DS_SQL;

--為通用數據集添加類型字段,並全部初始化為'SQL'
ALTER TABLE DATAGEAR_DATA_SET ADD DS_TYPE VARCHAR(50);

UPDATE DATAGEAR_DATA_SET SET DS_TYPE = 'SQL';

ALTER TABLE DATAGEAR_DATA_SET ALTER column DS_TYPE VARCHAR(50) NOT NULL;

--2020-08-10
--JSON值數據集
if not exists (select * from sysobjects where name='DATAGEAR_DATA_SET_JSON_VALUE' and xtype='U')
CREATE TABLE DATAGEAR_DATA_SET_JSON_VALUE
(
	DS_ID VARCHAR(50) NOT NULL,
	DS_VALUE VARCHAR(8000) NOT NULL,
	PRIMARY KEY (DS_ID)
);

ALTER TABLE DATAGEAR_DATA_SET_JSON_VALUE ADD FOREIGN KEY (DS_ID) REFERENCES DATAGEAR_DATA_SET (DS_ID) ON DELETE CASCADE;

--2020-08-12
--JSON文件數據集
if not exists (select * from sysobjects where name='DATAGEAR_DATA_SET_JSON_FILE' and xtype='U')
CREATE TABLE DATAGEAR_DATA_SET_JSON_FILE
(
	DS_ID VARCHAR(50) NOT NULL,
	DS_FILE_NAME VARCHAR(100) NOT NULL,
	DS_DISPLAY_NAME VARCHAR(100) NOT NULL,
	PRIMARY KEY (DS_ID)
);

ALTER TABLE DATAGEAR_DATA_SET_JSON_FILE ADD FOREIGN KEY (DS_ID) REFERENCES DATAGEAR_DATA_SET (DS_ID) ON DELETE CASCADE;


-----------------------------------------
--version[1.11.1], DO NOT EDIT THIS LINE!
-----------------------------------------


-----------------------------------------
--version[1.12.0], DO NOT EDIT THIS LINE!
-----------------------------------------

--2020-08-28
--JSON文件數據集添加編碼字段
ALTER TABLE DATAGEAR_DATA_SET_JSON_FILE ADD DS_FILE_ENCODING VARCHAR(50);

--2020-08-28
--Excel文件數據集
if not exists (select * from sysobjects where name='DATAGEAR_DATA_SET_EXCEL' and xtype='U')
CREATE TABLE DATAGEAR_DATA_SET_EXCEL
(
	DS_ID VARCHAR(50) NOT NULL,
	DS_FILE_NAME VARCHAR(100) NOT NULL,
	DS_DISPLAY_NAME VARCHAR(100) NOT NULL,
	DS_SHEET_INDEX INTEGER,
	DS_NAME_ROW INTEGER,
	DS_DATA_ROW_EXP VARCHAR(100),
	DS_DATA_COLUMN_EXP VARCHAR(100),
	DS_FORCE_XLS VARCHAR(10),
	PRIMARY KEY (DS_ID)
);

ALTER TABLE DATAGEAR_DATA_SET_EXCEL ADD FOREIGN KEY (DS_ID) REFERENCES DATAGEAR_DATA_SET (DS_ID) ON DELETE CASCADE;

--2020-08-31
--CSV值數據集
if not exists (select * from sysobjects where name='DATAGEAR_DATA_SET_CSV_VALUE' and xtype='U')
CREATE TABLE DATAGEAR_DATA_SET_CSV_VALUE
(
	DS_ID VARCHAR(50) NOT NULL,
	DS_VALUE VARCHAR(8000) NOT NULL,
	DS_NAME_ROW INTEGER,
	PRIMARY KEY (DS_ID)
);

ALTER TABLE DATAGEAR_DATA_SET_CSV_VALUE ADD FOREIGN KEY (DS_ID) REFERENCES DATAGEAR_DATA_SET (DS_ID) ON DELETE CASCADE;

--2020-08-31
--CSV文件數據集
if not exists (select * from sysobjects where name='DATAGEAR_DATA_SET_CSV_FILE' and xtype='U')
CREATE TABLE DATAGEAR_DATA_SET_CSV_FILE
(
	DS_ID VARCHAR(50) NOT NULL,
	DS_FILE_NAME VARCHAR(100) NOT NULL,
	DS_DISPLAY_NAME VARCHAR(100) NOT NULL,
	DS_FILE_ENCODING VARCHAR(50),
	DS_NAME_ROW INTEGER,
	PRIMARY KEY (DS_ID)
);

ALTER TABLE DATAGEAR_DATA_SET_CSV_FILE ADD FOREIGN KEY (DS_ID) REFERENCES DATAGEAR_DATA_SET (DS_ID) ON DELETE CASCADE;

--2020-09-03
--JSON文件數據集添加數據JSON路徑字段
ALTER TABLE DATAGEAR_DATA_SET_JSON_FILE ADD DS_DATA_JSON_PATH VARCHAR(200);

--2020-09-05
--HTTP數據集
if not exists (select * from sysobjects where name='DATAGEAR_DATA_SET_HTTP' and xtype='U')
CREATE TABLE DATAGEAR_DATA_SET_HTTP
(
	DS_ID VARCHAR(50) NOT NULL,
	DS_URI VARCHAR(1000) NOT NULL,
	DS_HEADER_CONTENT VARCHAR(5000),
	DS_RQT_METHOD VARCHAR(50),
	DS_RQT_CONTENT_TYPE VARCHAR(100),
	DS_RQT_CONTENT_CHARSET VARCHAR(100),
	DS_RQT_CONTENT varchar(8000),
	DS_RPS_CONTENT_TYPE VARCHAR(100),
	DS_RPS_DATA_JSON_PATH VARCHAR(200),
	PRIMARY KEY (DS_ID)
);

ALTER TABLE DATAGEAR_DATA_SET_HTTP ADD FOREIGN KEY (DS_ID) REFERENCES DATAGEAR_DATA_SET (DS_ID) ON DELETE CASCADE;


-----------------------------------------
--version[1.13.0], DO NOT EDIT THIS LINE!
-----------------------------------------

--2020-09-22
--數據分析項目
if not exists (select * from sysobjects where name='DATAGEAR_ANALYSIS_PROJECT' and xtype='U')
CREATE TABLE DATAGEAR_ANALYSIS_PROJECT
(
	AP_ID VARCHAR(50) NOT NULL,
	AP_NAME VARCHAR(100) NOT NULL,
	AP_DESC VARCHAR(500),
	AP_CREATE_USER_ID VARCHAR(50),
	AP_CREATE_TIME DATETIME,
	PRIMARY KEY (AP_ID)
);
-- alter table DATAGEAR_ANALYSIS_PROJECT drop column AP_CREATE_TIME;
-- alter table DATAGEAR_ANALYSIS_PROJECT add AP_CREATE_TIME DATETIME;

ALTER TABLE DATAGEAR_DATA_SET ADD  DS_AP_ID VARCHAR(50);

ALTER TABLE DATAGEAR_HTML_CHART_WIDGET ADD  HCW_AP_ID VARCHAR(50);

ALTER TABLE DATAGEAR_HTML_DASHBOARD ADD  HD_AP_ID VARCHAR(50);

--2020-09-25
--添加外鍵
ALTER TABLE DATAGEAR_DATA_SET ADD FOREIGN KEY (DS_AP_ID) REFERENCES DATAGEAR_ANALYSIS_PROJECT (AP_ID);

ALTER TABLE DATAGEAR_HTML_CHART_WIDGET ADD FOREIGN KEY (HCW_AP_ID) REFERENCES DATAGEAR_ANALYSIS_PROJECT (AP_ID);

ALTER TABLE DATAGEAR_HTML_DASHBOARD ADD FOREIGN KEY (HD_AP_ID) REFERENCES DATAGEAR_ANALYSIS_PROJECT (AP_ID);

--2020-09-25
--添加索引
CREATE INDEX DATAGEAR_DATA_SET_CREATE_USER_ID ON DATAGEAR_DATA_SET(DS_CREATE_USER_ID);

CREATE INDEX DATAGEAR_HTML_CHART_WIDGET_CREATE_USER_ID ON DATAGEAR_HTML_CHART_WIDGET(HCW_CREATE_USER_ID);

CREATE INDEX DATAGEAR_HTML_DASHBOARD_CREATE_USER_ID ON DATAGEAR_HTML_DASHBOARD(HD_CREATE_USER_ID);

--2020-09-26
--數據集資源目錄
if not exists (select * from sysobjects where name='DATAGEAR_DSR_DIRECTORY' and xtype='U')
CREATE TABLE DATAGEAR_DSR_DIRECTORY
(
	DD_ID VARCHAR(50) NOT NULL,
	DD_DIRECTORY VARCHAR(250) NOT NULL,
	DD_DESC VARCHAR(500),
	DD_CREATE_USER_ID VARCHAR(50),
	DD_CREATE_TIME DATETIME,
	PRIMARY KEY (DD_ID)
);
-- alter table DATAGEAR_DSR_DIRECTORY drop column DD_CREATE_TIME;
-- alter table DATAGEAR_DSR_DIRECTORY add DD_CREATE_TIME DATETIME;

--2020-09-26
--為文件類數據集添加服務端文件相關字段

ALTER TABLE DATAGEAR_DATA_SET_JSON_FILE ADD  DS_FILE_SOURCE_TYPE VARCHAR(50);

ALTER TABLE DATAGEAR_DATA_SET_JSON_FILE ADD  DS_DSRD_ID VARCHAR(50);

ALTER TABLE DATAGEAR_DATA_SET_JSON_FILE ADD  DS_DSRD_FILE_NAME VARCHAR(500);

ALTER TABLE DATAGEAR_DATA_SET_JSON_FILE ADD FOREIGN KEY (DS_DSRD_ID) REFERENCES DATAGEAR_DSR_DIRECTORY (DD_ID);

--舊數據都應改為UPLOAD類型
UPDATE DATAGEAR_DATA_SET_JSON_FILE SET DS_FILE_SOURCE_TYPE = 'UPLOAD';

ALTER TABLE DATAGEAR_DATA_SET_JSON_FILE ALTER COLUMN DS_FILE_SOURCE_TYPE VARCHAR(50) NOT NULL;

ALTER TABLE DATAGEAR_DATA_SET_EXCEL ADD  DS_FILE_SOURCE_TYPE VARCHAR(50);

ALTER TABLE DATAGEAR_DATA_SET_EXCEL ADD  DS_DSRD_ID VARCHAR(50);

ALTER TABLE DATAGEAR_DATA_SET_EXCEL ADD  DS_DSRD_FILE_NAME VARCHAR(500);

ALTER TABLE DATAGEAR_DATA_SET_EXCEL ADD FOREIGN KEY (DS_DSRD_ID) REFERENCES DATAGEAR_DSR_DIRECTORY (DD_ID);

--舊數據都應改為UPLOAD類型
UPDATE DATAGEAR_DATA_SET_EXCEL SET DS_FILE_SOURCE_TYPE = 'UPLOAD';

ALTER TABLE DATAGEAR_DATA_SET_EXCEL ALTER column DS_FILE_SOURCE_TYPE VARCHAR(50) NOT NULL;

ALTER TABLE DATAGEAR_DATA_SET_CSV_FILE ADD  DS_FILE_SOURCE_TYPE VARCHAR(50);

ALTER TABLE DATAGEAR_DATA_SET_CSV_FILE ADD  DS_DSRD_ID VARCHAR(50);

ALTER TABLE DATAGEAR_DATA_SET_CSV_FILE ADD  DS_DSRD_FILE_NAME VARCHAR(500);

ALTER TABLE DATAGEAR_DATA_SET_CSV_FILE ADD FOREIGN KEY (DS_DSRD_ID) REFERENCES DATAGEAR_DSR_DIRECTORY (DD_ID);

--舊數據都應改為UPLOAD類型
UPDATE DATAGEAR_DATA_SET_CSV_FILE SET DS_FILE_SOURCE_TYPE = 'UPLOAD';

ALTER TABLE DATAGEAR_DATA_SET_CSV_FILE ALTER COLUMN DS_FILE_SOURCE_TYPE VARCHAR(50) NOT NULL;


-----------------------------------------
--version[1.13.1], DO NOT EDIT THIS LINE!
-----------------------------------------



-----------------------------------------
--version[2.0.0], DO NOT EDIT THIS LINE!
-----------------------------------------



-----------------------------------------
--version[2.1.0], DO NOT EDIT THIS LINE!
-----------------------------------------

--2020-12-04
--擴容列長度
ALTER TABLE DATAGEAR_SCHEMA ALTER column SCHEMA_URL  VARCHAR(1000);

--2020-12-09
--添加內置角色
INSERT INTO DATAGEAR_ROLE VALUES('ROLE_REGISTRY', '注冊用戶', '系統新添加和注冊的用戶都會自動添加至此角色', 'true', default);

INSERT INTO DATAGEAR_ROLE VALUES('ROLE_DATA_ADMIN', '數據管理員', '可以管理數據源、數據集、圖表、看板', 'true', default);

INSERT INTO DATAGEAR_ROLE VALUES('ROLE_DATA_ANALYST', '數據分析員', '僅可查看數據源、數據集、圖表、看板,展示圖表和看板', 'true', default);

--2020-12-10
--將全部已注冊用戶關聯至[注冊用戶]角色
--此語句可多次執行,因為已排除了可能的重復項
INSERT INTO DATAGEAR_ROLE_USER
SELECT
	'RUREG' + USR.USER_ID,
	'ROLE_REGISTRY',
	USR.USER_ID
FROM DATAGEAR_USER USR
WHERE
	USR.USER_ID NOT IN (SELECT RU_USER_ID FROM DATAGEAR_ROLE_USER WHERE RU_ROLE_ID = 'ROLE_REGISTRY');

--將全部已注冊用戶關聯至[數據管理員]角色,這樣才符合之前版本的設計概念
--此語句可多次執行,因為已排除了可能的重復項
INSERT INTO DATAGEAR_ROLE_USER
SELECT
	'RUDA' + USR.USER_ID,
	'ROLE_DATA_ADMIN',
	USR.USER_ID
FROM DATAGEAR_USER USR
WHERE
	USR.USER_ID NOT IN (SELECT RU_USER_ID FROM DATAGEAR_ROLE_USER WHERE RU_ROLE_ID = 'ROLE_DATA_ADMIN');


-----------------------------------------
--version[2.1.1], DO NOT EDIT THIS LINE!
-----------------------------------------



-----------------------------------------
--version[2.2.0], DO NOT EDIT THIS LINE!
-----------------------------------------

--2021-01-17
--簡化DATAGEAR_VERSION表結構
ALTER TABLE DATAGEAR_VERSION ADD VERSION_VALUE VARCHAR(100);
go
UPDATE DATAGEAR_VERSION SET VERSION_VALUE = (SELECT VERSION_MAJOR + '.' + VERSION_MINOR + '.' + VERSION_REVISION FROM DATAGEAR_VERSION);
go
ALTER TABLE DATAGEAR_VERSION DROP COLUMN VERSION_MAJOR;
go
ALTER TABLE DATAGEAR_VERSION DROP COLUMN VERSION_MINOR;
go
ALTER TABLE DATAGEAR_VERSION DROP COLUMN VERSION_REVISION;
go
ALTER TABLE DATAGEAR_VERSION DROP COLUMN VERSION_BUILD;
go

-----------------------------------------
--version[2.3.0], DO NOT EDIT THIS LINE!
-----------------------------------------

--添加圖表數據集附件列
ALTER TABLE DATAGEAR_HCW_DS ADD DS_ATTACHMENT VARCHAR(20);
go
--自定義整數取余數函數
--valueNum    數值
--divNum      除數
CREATE FUNCTION DATAGEAR_FUNC_MODINT(@valueNum INTEGER, @divNum INTEGER) RETURNS INTEGER
as
begin
	--PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'org.datagear.management.util.DerbyFunctionSupport.modInt';
	return @valueNum % @divNum;
end;
go
--自定義字符串取長度函數
--valueStr    字符串
CREATE FUNCTION DATAGEAR_FUNC_LENGTH(@valueStr VARCHAR(1000)) RETURNS INTEGER
as
begin
--	PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'org.datagear.management.util.DerbyFunctionSupport.lengthStr';
	return len(@valueStr);
end;
go

-----------------------------------------
--version[2.4.0], DO NOT EDIT THIS LINE!
-----------------------------------------

--添加數據集屬性默認值列
ALTER TABLE DATAGEAR_DATA_SET_PROP ADD PROP_DFT_VALUE VARCHAR(100);


UPDATE DATAGEAR_VERSION SET VERSION_VALUE='2.4.0';
insert into DATAGEAR_VERSION(VERSION_VALUE)values('2.4.0');


--select 'DROP TABLE '+name + ';' from sysobjects where name like'DATAGEAR%' and xtype='U' 
--select * from DATAGEAR_VERSION;

--select 'ALTER TABLE ' + b.name + ' NOCHECK CONSTRAINT ' + a.name +';'  from sysobjects a ,sysobjects b where a.xtype ='f' and a.parent_obj = b.id and b.name like 'DATAGEAR%'; 
--select 'ALTER TABLE ' + b.name + ' CHECK CONSTRAINT ' + a.name +';'  from sysobjects a ,sysobjects b where a.xtype ='f' and a.parent_obj = b.id and b.name like 'DATAGEAR%'; 
--select 'ALTER TABLE ' + b.name + ' DROP CONSTRAINT ' + a.name +';'  from sysobjects a ,sysobjects b where a.xtype ='f' and a.parent_obj = b.id and b.name like 'DATAGEAR%'; 

--drop function dbo.DATAGEAR_FUNC_LENGTH;
--drop function dbo.DATAGEAR_FUNC_MODINT;
--drop function dbo.DATAGEAR_REPLACE;

6. 其他

Datagear的數據庫命名規范過多次,不少表、字段名稱、類型等做了修改,一些字段刪除了,轉換時由於兩個drop column沒有執行,且該列有非空約束,造成添加時失敗。
但datagear提示“操作失敗,記錄已被引用,無法刪除或修改標識(違反數據庫完整性約束)”。把外鍵約束禁用,后又刪除都無濟於事。最終下載源碼把環境跑起來才發現是字段非空驗證不通過。

Datagear源碼中並未有SQL server的包,因此在pom中配置SQLserver的dependency后運行。

7. 參考

DataGear 變更部署數據庫操作指南

8. 附:SQL server 配置

\config\application.properties

#--UTF-8 file--

#是否禁用匿名用戶功能,禁用后,匿名用戶將不能使用系統功能
#可選值:true 表示禁用;false 表示不禁用
disableAnonymous=false

#是否禁用注冊功能
#可選值:true 表示禁用;false 表示不禁用
disableRegister=true

#默認角色,可選值:ROLE_DATA_ADMIN、ROLE_DATA_ANALYST
#ROLE_DATA_ADMIN 數據管理員,可以管理數據源、數據集、圖表、看板
#ROLE_DATA_ANALYST 數據分析員,僅可查看數據源、數據集、圖表、看板,展示圖表和看板
#默認角色:注冊用戶
#defaultRole.register=ROLE_DATA_ADMIN
#默認角色:管理員添加用戶
#defaultRole.add=ROLE_DATA_ADMIN
#默認角色:匿名用戶
#defaultRole.anonymous=ROLE_DATA_ADMIN

#日志級別
#ERROR, WARN, INFO, DEBUG, TRACE
logging.level.org.datagear=INFO

#日志存儲路徑
logging.file.name=logs/datagear.log

#服務端口號
server.port=50401

#數據源配置
datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
datasource.url=jdbc:sqlserver://192.168.1.30:1433;SelectMethod=cursor;DatabaseName=datagear
datasource.username=datagear
datasource.password=datagear


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM