Wenjun Ruan
1 year ago
committed by
GitHub
8 changed files with 408 additions and 213 deletions
@ -0,0 +1,137 @@ |
|||||||
|
/* |
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||||
|
* contributor license agreements. See the NOTICE file distributed with |
||||||
|
* this work for additional information regarding copyright ownership. |
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||||
|
* (the "License"); you may not use this file except in compliance with |
||||||
|
* the License. You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.common.sql; |
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.io.InputStreamReader; |
||||||
|
import java.io.LineNumberReader; |
||||||
|
import java.io.Reader; |
||||||
|
import java.nio.charset.Charset; |
||||||
|
import java.nio.charset.StandardCharsets; |
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.springframework.core.io.ClassPathResource; |
||||||
|
import org.springframework.core.io.Resource; |
||||||
|
|
||||||
|
public class ClasspathSqlScriptParser implements SqlScriptParser { |
||||||
|
|
||||||
|
private final String sqlScriptPath; |
||||||
|
|
||||||
|
private final Charset charset; |
||||||
|
|
||||||
|
public ClasspathSqlScriptParser(String sqlScriptPath) { |
||||||
|
this.sqlScriptPath = sqlScriptPath; |
||||||
|
this.charset = StandardCharsets.UTF_8; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<String> getAllSql() throws IOException { |
||||||
|
Resource sqlScriptResource = new ClassPathResource(sqlScriptPath); |
||||||
|
List<String> result = new ArrayList<>(); |
||||||
|
try ( |
||||||
|
InputStream inputStream = sqlScriptResource.getInputStream(); |
||||||
|
Reader sqlScriptReader = new InputStreamReader(inputStream, charset); |
||||||
|
LineNumberReader lineNumberReader = new LineNumberReader(sqlScriptReader)) { |
||||||
|
String sql; |
||||||
|
do { |
||||||
|
sql = parseNextSql(lineNumberReader); |
||||||
|
if (StringUtils.isNotBlank(sql)) { |
||||||
|
result.add(sql); |
||||||
|
} |
||||||
|
} while (StringUtils.isNotBlank(sql)); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
private String parseNextSql(LineNumberReader lineNumberReader) throws IOException { |
||||||
|
String line; |
||||||
|
while ((line = lineNumberReader.readLine()) != null) { |
||||||
|
String trimLine = line.trim(); |
||||||
|
if (StringUtils.isEmpty(trimLine) || isComment(trimLine)) { |
||||||
|
// Skip the empty line, comment line
|
||||||
|
continue; |
||||||
|
} |
||||||
|
if (trimLine.startsWith("/*")) { |
||||||
|
skipLicenseHeader(lineNumberReader); |
||||||
|
continue; |
||||||
|
} |
||||||
|
if (trimLine.startsWith("delimiter")) { |
||||||
|
// begin to parse processor, until delimiter ;
|
||||||
|
String[] split = trimLine.split(" "); |
||||||
|
return parseProcedure(lineNumberReader, split[1]); |
||||||
|
} |
||||||
|
// begin to parse sql until;
|
||||||
|
List<String> sqlLines = new ArrayList<>(); |
||||||
|
sqlLines.add(line); |
||||||
|
while (!line.endsWith(";")) { |
||||||
|
line = lineNumberReader.readLine(); |
||||||
|
if (line == null) { |
||||||
|
break; |
||||||
|
} |
||||||
|
if (StringUtils.isBlank(line)) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
sqlLines.add(line); |
||||||
|
} |
||||||
|
return String.join("\n", sqlLines); |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
private void skipLicenseHeader(LineNumberReader lineNumberReader) throws IOException { |
||||||
|
String line; |
||||||
|
while ((line = lineNumberReader.readLine()) != null) { |
||||||
|
String trimLine = line.trim(); |
||||||
|
if (StringUtils.isEmpty(trimLine) || isComment(trimLine)) { |
||||||
|
// Skip the empty line, comment line
|
||||||
|
continue; |
||||||
|
} |
||||||
|
if (line.startsWith("*/")) { |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private String parseProcedure(LineNumberReader lineNumberReader, String delimiter) throws IOException { |
||||||
|
List<String> sqlLines = new ArrayList<>(); |
||||||
|
// begin to parse processor, until delimiter ;
|
||||||
|
String line; |
||||||
|
while (true) { |
||||||
|
line = lineNumberReader.readLine(); |
||||||
|
if (line == null) { |
||||||
|
break; |
||||||
|
} |
||||||
|
if (StringUtils.isBlank(line)) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
if (line.startsWith(delimiter)) { |
||||||
|
break; |
||||||
|
} |
||||||
|
sqlLines.add(line); |
||||||
|
} |
||||||
|
return String.join("\n", sqlLines); |
||||||
|
} |
||||||
|
|
||||||
|
private boolean isComment(String line) { |
||||||
|
return line.startsWith("--") || line.startsWith("//"); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,65 @@ |
|||||||
|
/* |
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||||
|
* contributor license agreements. See the NOTICE file distributed with |
||||||
|
* this work for additional information regarding copyright ownership. |
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||||
|
* (the "License"); you may not use this file except in compliance with |
||||||
|
* the License. You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.common.sql; |
||||||
|
|
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.sql.Connection; |
||||||
|
import java.sql.SQLException; |
||||||
|
import java.sql.Statement; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import javax.sql.DataSource; |
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
|
||||||
|
@Slf4j |
||||||
|
public class SqlScriptRunner { |
||||||
|
|
||||||
|
private final DataSource dataSource; |
||||||
|
|
||||||
|
private final SqlScriptParser sqlScriptParser; |
||||||
|
|
||||||
|
/** |
||||||
|
* @param dataSource DataSource which used to execute the sql script. |
||||||
|
* @param sqlScriptFilePath Sqk script file path, the path should under classpath. |
||||||
|
*/ |
||||||
|
public SqlScriptRunner(DataSource dataSource, String sqlScriptFilePath) { |
||||||
|
this.dataSource = dataSource; |
||||||
|
this.sqlScriptParser = new ClasspathSqlScriptParser(sqlScriptFilePath); |
||||||
|
} |
||||||
|
|
||||||
|
public void execute() throws SQLException, IOException { |
||||||
|
List<String> allSql = sqlScriptParser.getAllSql(); |
||||||
|
try (Connection connection = dataSource.getConnection()) { |
||||||
|
for (String sql : allSql) { |
||||||
|
if (StringUtils.isBlank(sql)) { |
||||||
|
continue; |
||||||
|
} |
||||||
|
try (Statement statement = connection.createStatement()) { |
||||||
|
// Since some sql doesn't have result so we believe if there is no exception then we think the sql
|
||||||
|
// execute success.
|
||||||
|
statement.execute(sql); |
||||||
|
log.info("Execute sql: {} success", sql); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -1,162 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright 2004-2020 the original author or authors. |
|
||||||
* <p> |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* <p> |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
* <p> |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
|
|
||||||
package org.apache.dolphinscheduler.common.utils; |
|
||||||
|
|
||||||
import java.io.IOException; |
|
||||||
import java.io.LineNumberReader; |
|
||||||
import java.io.Reader; |
|
||||||
import java.sql.Connection; |
|
||||||
import java.sql.ResultSet; |
|
||||||
import java.sql.ResultSetMetaData; |
|
||||||
import java.sql.SQLException; |
|
||||||
import java.sql.Statement; |
|
||||||
import java.util.ArrayList; |
|
||||||
import java.util.List; |
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j; |
|
||||||
|
|
||||||
/** |
|
||||||
* Tool to run database scripts |
|
||||||
*/ |
|
||||||
@Slf4j |
|
||||||
public class ScriptRunner { |
|
||||||
|
|
||||||
private static final String DEFAULT_DELIMITER = ";"; |
|
||||||
|
|
||||||
private final Connection connection; |
|
||||||
|
|
||||||
private final boolean stopOnError; |
|
||||||
private final boolean autoCommit; |
|
||||||
|
|
||||||
private String delimiter = DEFAULT_DELIMITER; |
|
||||||
private boolean fullLineDelimiter = false; |
|
||||||
|
|
||||||
public ScriptRunner(Connection connection, boolean autoCommit, boolean stopOnError) { |
|
||||||
this.connection = connection; |
|
||||||
this.autoCommit = autoCommit; |
|
||||||
this.stopOnError = stopOnError; |
|
||||||
} |
|
||||||
|
|
||||||
public void setDelimiter(String delimiter, boolean fullLineDelimiter) { |
|
||||||
this.delimiter = delimiter; |
|
||||||
this.fullLineDelimiter = fullLineDelimiter; |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Runs an SQL script (read in using the Reader parameter) |
|
||||||
* |
|
||||||
* @param reader - the source of the script |
|
||||||
* @throws IOException errors |
|
||||||
* @throws SQLException errors |
|
||||||
*/ |
|
||||||
public void runScript(Reader reader) throws IOException, SQLException { |
|
||||||
try { |
|
||||||
boolean originalAutoCommit = connection.getAutoCommit(); |
|
||||||
try { |
|
||||||
if (originalAutoCommit != this.autoCommit) { |
|
||||||
connection.setAutoCommit(this.autoCommit); |
|
||||||
} |
|
||||||
runScript(connection, reader); |
|
||||||
} finally { |
|
||||||
connection.setAutoCommit(originalAutoCommit); |
|
||||||
} |
|
||||||
} catch (IOException | SQLException e) { |
|
||||||
throw e; |
|
||||||
} catch (Exception e) { |
|
||||||
throw new RuntimeException("Error running script. Cause: " + e, e); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
/** |
|
||||||
* Runs an SQL script (read in using the Reader parameter) using the connection |
|
||||||
* passed in |
|
||||||
* |
|
||||||
* @param conn - the connection to use for the script |
|
||||||
* @param reader - the source of the script |
|
||||||
* @throws SQLException if any SQL errors occur |
|
||||||
* @throws IOException if there is an error reading from the Reader |
|
||||||
*/ |
|
||||||
private void runScript(Connection conn, Reader reader) throws IOException, SQLException { |
|
||||||
List<String> command = null; |
|
||||||
try { |
|
||||||
LineNumberReader lineReader = new LineNumberReader(reader); |
|
||||||
String line; |
|
||||||
while ((line = lineReader.readLine()) != null) { |
|
||||||
if (command == null) { |
|
||||||
command = new ArrayList<>(); |
|
||||||
} |
|
||||||
String trimmedLine = line.trim(); |
|
||||||
if (trimmedLine.startsWith("--")) { |
|
||||||
log.info("\n{}", trimmedLine); |
|
||||||
} else if (trimmedLine.length() < 1 || trimmedLine.startsWith("//")) { |
|
||||||
// Do nothing
|
|
||||||
} else if (trimmedLine.startsWith("delimiter")) { |
|
||||||
String newDelimiter = trimmedLine.split(" ")[1]; |
|
||||||
this.setDelimiter(newDelimiter, fullLineDelimiter); |
|
||||||
|
|
||||||
} else if (!fullLineDelimiter && trimmedLine.endsWith(getDelimiter()) |
|
||||||
|| fullLineDelimiter && trimmedLine.equals(getDelimiter())) { |
|
||||||
command.add(line.substring(0, line.lastIndexOf(getDelimiter()))); |
|
||||||
log.info("\n{}", String.join("\n", command)); |
|
||||||
|
|
||||||
try (Statement statement = conn.createStatement()) { |
|
||||||
statement.execute(String.join(" ", command)); |
|
||||||
try (ResultSet rs = statement.getResultSet()) { |
|
||||||
if (stopOnError && rs != null) { |
|
||||||
ResultSetMetaData md = rs.getMetaData(); |
|
||||||
int cols = md.getColumnCount(); |
|
||||||
for (int i = 1; i < cols; i++) { |
|
||||||
String name = md.getColumnLabel(i); |
|
||||||
log.info("{} \t", name); |
|
||||||
} |
|
||||||
log.info(""); |
|
||||||
while (rs.next()) { |
|
||||||
for (int i = 1; i < cols; i++) { |
|
||||||
String value = rs.getString(i); |
|
||||||
log.info("{} \t", value); |
|
||||||
} |
|
||||||
log.info(""); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} catch (SQLException e) { |
|
||||||
log.error("SQLException", e); |
|
||||||
throw e; |
|
||||||
} |
|
||||||
|
|
||||||
command = null; |
|
||||||
Thread.yield(); |
|
||||||
} else { |
|
||||||
command.add(line); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
} catch (SQLException e) { |
|
||||||
log.error("Error executing: {}", command); |
|
||||||
throw e; |
|
||||||
} catch (IOException e) { |
|
||||||
e.fillInStackTrace(); |
|
||||||
log.error("Error executing: {}", command); |
|
||||||
throw e; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
private String getDelimiter() { |
|
||||||
return delimiter; |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
@ -0,0 +1,52 @@ |
|||||||
|
/* |
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||||
|
* contributor license agreements. See the NOTICE file distributed with |
||||||
|
* this work for additional information regarding copyright ownership. |
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||||
|
* (the "License"); you may not use this file except in compliance with |
||||||
|
* the License. You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.apache.dolphinscheduler.common.sql; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions; |
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
|
||||||
|
class ClasspathSqlScriptParserTest { |
||||||
|
|
||||||
|
@Test |
||||||
|
void testMysqlDmlSql() throws IOException { |
||||||
|
ClasspathSqlScriptParser classpathSqlScriptParser = new ClasspathSqlScriptParser("sql/mysql_dml.sql"); |
||||||
|
List<String> allSql = classpathSqlScriptParser.getAllSql(); |
||||||
|
Assertions.assertEquals("drop PROCEDURE if EXISTS dolphin_t_ds_tenant_insert_default;", allSql.get(0)); |
||||||
|
Assertions.assertEquals("CREATE PROCEDURE dolphin_t_ds_tenant_insert_default()\n" + |
||||||
|
"BEGIN\n" + |
||||||
|
" IF\n" + |
||||||
|
"NOT EXISTS(SELECT 1\n" + |
||||||
|
" FROM t_ds_tenant\n" + |
||||||
|
" WHERE id = -1)\n" + |
||||||
|
" THEN\n" + |
||||||
|
" INSERT INTO `t_ds_tenant` VALUES ('-1', 'default', 'default tenant', '1', current_timestamp, current_timestamp);\n" |
||||||
|
+ |
||||||
|
"END IF;\n" + |
||||||
|
"END;", String.join("", allSql.get(1))); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
void testMysqlDdlSql() throws IOException { |
||||||
|
ClasspathSqlScriptParser classpathSqlScriptParser = new ClasspathSqlScriptParser("sql/mysql_ddl.sql"); |
||||||
|
List<String> allSql = classpathSqlScriptParser.getAllSql(); |
||||||
|
Assertions.assertEquals("ALTER TABLE t_ds_process_definition DROP tenant_id;", allSql.get(0)); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
/* |
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||||
|
* contributor license agreements. See the NOTICE file distributed with |
||||||
|
* this work for additional information regarding copyright ownership. |
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||||
|
* (the "License"); you may not use this file except in compliance with |
||||||
|
* the License. You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
ALTER TABLE t_ds_process_definition DROP tenant_id; |
||||||
|
ALTER TABLE t_ds_process_definition_log DROP tenant_id; |
||||||
|
ALTER TABLE t_ds_process_instance DROP tenant_id; |
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = 0; |
||||||
|
-- auto detect by atlas, see more detail in https://github.com/apache/dolphinscheduler/pull/14620 |
||||||
|
ALTER TABLE `QRTZ_BLOB_TRIGGERS` COLLATE utf8_bin, MODIFY COLUMN `SCHED_NAME` varchar(120) NOT NULL, MODIFY COLUMN `TRIGGER_NAME` varchar(200) NOT NULL, MODIFY COLUMN `TRIGGER_GROUP` varchar(200) NOT NULL; |
||||||
|
ALTER TABLE `QRTZ_CALENDARS` COLLATE utf8_bin, MODIFY COLUMN `SCHED_NAME` varchar(120) NOT NULL, MODIFY COLUMN `CALENDAR_NAME` varchar(200) NOT NULL; |
||||||
|
ALTER TABLE `QRTZ_CRON_TRIGGERS` COLLATE utf8_bin, MODIFY COLUMN `SCHED_NAME` varchar(120) NOT NULL, MODIFY COLUMN `TRIGGER_NAME` varchar(200) NOT NULL, MODIFY COLUMN `TRIGGER_GROUP` varchar(200) NOT NULL, MODIFY COLUMN `CRON_EXPRESSION` varchar(120) NOT NULL, MODIFY COLUMN `TIME_ZONE_ID` varchar(80) NULL; |
||||||
|
ALTER TABLE `QRTZ_FIRED_TRIGGERS` COLLATE utf8_bin, MODIFY COLUMN `SCHED_NAME` varchar(120) NOT NULL, MODIFY COLUMN `ENTRY_ID` varchar(200) NOT NULL, MODIFY COLUMN `TRIGGER_NAME` varchar(200) NOT NULL, MODIFY COLUMN `TRIGGER_GROUP` varchar(200) NOT NULL, MODIFY COLUMN `INSTANCE_NAME` varchar(200) NOT NULL, MODIFY COLUMN `STATE` varchar(16) NOT NULL, MODIFY COLUMN `JOB_NAME` varchar(200) NULL, MODIFY COLUMN `JOB_GROUP` varchar(200) NULL, MODIFY COLUMN `IS_NONCONCURRENT` varchar(1) NULL, MODIFY COLUMN `REQUESTS_RECOVERY` varchar(1) NULL; |
||||||
|
ALTER TABLE `QRTZ_JOB_DETAILS` COLLATE utf8_bin, MODIFY COLUMN `SCHED_NAME` varchar(120) NOT NULL, MODIFY COLUMN `JOB_NAME` varchar(200) NOT NULL, MODIFY COLUMN `JOB_GROUP` varchar(200) NOT NULL, MODIFY COLUMN `DESCRIPTION` varchar(250) NULL, MODIFY COLUMN `JOB_CLASS_NAME` varchar(250) NOT NULL, MODIFY COLUMN `IS_DURABLE` varchar(1) NOT NULL, MODIFY COLUMN `IS_NONCONCURRENT` varchar(1) NOT NULL, MODIFY COLUMN `IS_UPDATE_DATA` varchar(1) NOT NULL, MODIFY COLUMN `REQUESTS_RECOVERY` varchar(1) NOT NULL; |
||||||
|
ALTER TABLE `QRTZ_LOCKS` COLLATE utf8_bin, MODIFY COLUMN `SCHED_NAME` varchar(120) NOT NULL, MODIFY COLUMN `LOCK_NAME` varchar(40) NOT NULL; |
||||||
|
ALTER TABLE `QRTZ_PAUSED_TRIGGER_GRPS` COLLATE utf8_bin, MODIFY COLUMN `SCHED_NAME` varchar(120) NOT NULL, MODIFY COLUMN `TRIGGER_GROUP` varchar(200) NOT NULL; |
||||||
|
ALTER TABLE `QRTZ_SCHEDULER_STATE` COLLATE utf8_bin, MODIFY COLUMN `SCHED_NAME` varchar(120) NOT NULL, MODIFY COLUMN `INSTANCE_NAME` varchar(200) NOT NULL; |
||||||
|
ALTER TABLE `QRTZ_SIMPLE_TRIGGERS` COLLATE utf8_bin, MODIFY COLUMN `SCHED_NAME` varchar(120) NOT NULL, MODIFY COLUMN `TRIGGER_NAME` varchar(200) NOT NULL, MODIFY COLUMN `TRIGGER_GROUP` varchar(200) NOT NULL; |
||||||
|
ALTER TABLE `QRTZ_SIMPROP_TRIGGERS` COLLATE utf8_bin, MODIFY COLUMN `SCHED_NAME` varchar(120) NOT NULL, MODIFY COLUMN `TRIGGER_NAME` varchar(200) NOT NULL, MODIFY COLUMN `TRIGGER_GROUP` varchar(200) NOT NULL, MODIFY COLUMN `STR_PROP_1` varchar(512) NULL, MODIFY COLUMN `STR_PROP_2` varchar(512) NULL, MODIFY COLUMN `STR_PROP_3` varchar(512) NULL, MODIFY COLUMN `BOOL_PROP_1` varchar(1) NULL, MODIFY COLUMN `BOOL_PROP_2` varchar(1) NULL; |
||||||
|
ALTER TABLE `QRTZ_TRIGGERS` COLLATE utf8_bin, MODIFY COLUMN `SCHED_NAME` varchar(120) NOT NULL, MODIFY COLUMN `TRIGGER_NAME` varchar(200) NOT NULL, MODIFY COLUMN `TRIGGER_GROUP` varchar(200) NOT NULL, MODIFY COLUMN `JOB_NAME` varchar(200) NOT NULL, MODIFY COLUMN `JOB_GROUP` varchar(200) NOT NULL, MODIFY COLUMN `DESCRIPTION` varchar(250) NULL, MODIFY COLUMN `TRIGGER_STATE` varchar(16) NOT NULL, MODIFY COLUMN `TRIGGER_TYPE` varchar(8) NOT NULL, MODIFY COLUMN `CALENDAR_NAME` varchar(200) NULL; |
||||||
|
ALTER TABLE `t_ds_plugin_define` AUTO_INCREMENT 2; |
||||||
|
ALTER TABLE `t_ds_process_instance` MODIFY COLUMN `state_history` text NULL COMMENT 'state history desc'; |
||||||
|
ALTER TABLE `t_ds_project` MODIFY COLUMN `description` varchar(255) NULL; |
||||||
|
ALTER TABLE `t_ds_task_group` MODIFY COLUMN `description` varchar(255) NULL; |
||||||
|
ALTER TABLE `t_ds_task_instance` MODIFY COLUMN `app_link` text NULL COMMENT 'yarn app id', MODIFY COLUMN `cache_key` varchar(200) NULL COMMENT 'cache_key', MODIFY COLUMN `executor_name` varchar(64) NULL; |
||||||
|
ALTER TABLE `t_ds_worker_group` MODIFY COLUMN `description` text NULL COMMENT 'description'; |
||||||
|
ALTER TABLE `t_ds_task_instance` MODIFY COLUMN `cache_key` varchar(200) NULL COMMENT 'cache_key', MODIFY COLUMN `executor_name` varchar(64) NULL; |
||||||
|
ALTER TABLE `t_ds_fav_task` MODIFY COLUMN `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id'; |
||||||
|
ALTER TABLE `t_ds_task_instance` MODIFY COLUMN `cache_key` varchar(200) NULL COMMENT 'cache_key', MODIFY COLUMN `executor_name` varchar(64) NULL; |
||||||
|
SET FOREIGN_KEY_CHECKS = 1; |
@ -0,0 +1,84 @@ |
|||||||
|
/* |
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||||
|
* contributor license agreements. See the NOTICE file distributed with |
||||||
|
* this work for additional information regarding copyright ownership. |
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||||
|
* (the "License"); you may not use this file except in compliance with |
||||||
|
* the License. You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
-- ############################# t_ds_tenant ############################# |
||||||
|
drop PROCEDURE if EXISTS dolphin_t_ds_tenant_insert_default; |
||||||
|
delimiter d// |
||||||
|
CREATE PROCEDURE dolphin_t_ds_tenant_insert_default() |
||||||
|
BEGIN |
||||||
|
IF |
||||||
|
NOT EXISTS(SELECT 1 |
||||||
|
FROM t_ds_tenant |
||||||
|
WHERE id = -1) |
||||||
|
THEN |
||||||
|
INSERT INTO `t_ds_tenant` VALUES ('-1', 'default', 'default tenant', '1', current_timestamp, current_timestamp); |
||||||
|
END IF; |
||||||
|
END; |
||||||
|
d// |
||||||
|
|
||||||
|
delimiter ; |
||||||
|
CALL dolphin_t_ds_tenant_insert_default(); |
||||||
|
DROP PROCEDURE dolphin_t_ds_tenant_insert_default; |
||||||
|
|
||||||
|
-- tenant improvement |
||||||
|
UPDATE t_ds_schedules t1 JOIN t_ds_process_definition t2 ON t1.process_definition_code = t2.code LEFT JOIN t_ds_tenant t3 ON t2.tenant_id = t3.id SET t1.tenant_code = COALESCE(t3.tenant_code, 'default'); |
||||||
|
UPDATE `t_ds_process_instance` SET `tenant_code` = 'default' WHERE `tenant_code` IS NULL; |
||||||
|
|
||||||
|
-- data quality support choose database |
||||||
|
INSERT IGNORE INTO `t_ds_dq_rule_input_entry` |
||||||
|
(`id`, `field`, `type`, `title`, `value`, `options`, `placeholder`, `option_source_type`, `value_type`, `input_type`, `is_show`, `can_edit`, `is_emit`, `is_validate`, `create_time`, `update_time`) |
||||||
|
VALUES(30, 'src_database', 'select', '$t(src_database)', NULL, NULL, 'please select source database', 0, 0, 0, 1, 1, 1, 1, current_timestamp, current_timestamp); |
||||||
|
INSERT IGNORE INTO `t_ds_dq_rule_input_entry` |
||||||
|
(`id`, `field`, `type`, `title`, `value`, `options`, `placeholder`, `option_source_type`, `value_type`, `input_type`, `is_show`, `can_edit`, `is_emit`, `is_validate`, `create_time`, `update_time`) |
||||||
|
VALUES(31, 'target_database', 'select', '$t(target_database)', NULL, NULL, 'please select target database', 0, 0, 0, 1, 1, 1, 1, current_timestamp, current_timestamp); |
||||||
|
|
||||||
|
INSERT IGNORE INTO `t_ds_relation_rule_input_entry` |
||||||
|
(`id`, `rule_id`, `rule_input_entry_id`, `values_map`, `index`, `create_time`, `update_time`) |
||||||
|
VALUES(151, 1, 30, NULL, 2, current_timestamp, current_timestamp); |
||||||
|
INSERT IGNORE INTO `t_ds_relation_rule_input_entry` |
||||||
|
(`id`, `rule_id`, `rule_input_entry_id`, `values_map`, `index`, `create_time`, `update_time`) |
||||||
|
VALUES(152, 2, 30, NULL, 2, current_timestamp, current_timestamp); |
||||||
|
INSERT IGNORE INTO `t_ds_relation_rule_input_entry` |
||||||
|
(`id`, `rule_id`, `rule_input_entry_id`, `values_map`, `index`, `create_time`, `update_time`) |
||||||
|
VALUES(153, 3, 30, NULL, 2, current_timestamp, current_timestamp); |
||||||
|
INSERT IGNORE INTO `t_ds_relation_rule_input_entry` |
||||||
|
(`id`, `rule_id`, `rule_input_entry_id`, `values_map`, `index`, `create_time`, `update_time`) |
||||||
|
VALUES(154, 4, 30, NULL, 2, current_timestamp, current_timestamp); |
||||||
|
INSERT IGNORE INTO `t_ds_relation_rule_input_entry` |
||||||
|
(`id`, `rule_id`, `rule_input_entry_id`, `values_map`, `index`, `create_time`, `update_time`) |
||||||
|
VALUES(155, 5, 30, NULL, 2, current_timestamp, current_timestamp); |
||||||
|
INSERT IGNORE INTO `t_ds_relation_rule_input_entry` |
||||||
|
(`id`, `rule_id`, `rule_input_entry_id`, `values_map`, `index`, `create_time`, `update_time`) |
||||||
|
VALUES(156, 6, 30, NULL, 2, current_timestamp, current_timestamp); |
||||||
|
INSERT IGNORE INTO `t_ds_relation_rule_input_entry` |
||||||
|
(`id`, `rule_id`, `rule_input_entry_id`, `values_map`, `index`, `create_time`, `update_time`) |
||||||
|
VALUES(157, 7, 30, NULL, 2, current_timestamp, current_timestamp); |
||||||
|
INSERT IGNORE INTO `t_ds_relation_rule_input_entry` |
||||||
|
(`id`, `rule_id`, `rule_input_entry_id`, `values_map`, `index`, `create_time`, `update_time`) |
||||||
|
VALUES(158, 8, 30, NULL, 2, current_timestamp, current_timestamp); |
||||||
|
INSERT IGNORE INTO `t_ds_relation_rule_input_entry` |
||||||
|
(`id`, `rule_id`, `rule_input_entry_id`, `values_map`, `index`, `create_time`, `update_time`) |
||||||
|
VALUES(159, 9, 30, NULL, 2, current_timestamp, current_timestamp); |
||||||
|
INSERT IGNORE INTO `t_ds_relation_rule_input_entry` |
||||||
|
(`id`, `rule_id`, `rule_input_entry_id`, `values_map`, `index`, `create_time`, `update_time`) |
||||||
|
VALUES(160, 10, 30, NULL, 2, current_timestamp, current_timestamp); |
||||||
|
INSERT IGNORE INTO `t_ds_relation_rule_input_entry` |
||||||
|
(`id`, `rule_id`, `rule_input_entry_id`, `values_map`, `index`, `create_time`, `update_time`) |
||||||
|
VALUES(161, 3, 31, NULL, 6, current_timestamp, current_timestamp); |
||||||
|
INSERT IGNORE INTO `t_ds_relation_rule_input_entry` |
||||||
|
(`id`, `rule_id`, `rule_input_entry_id`, `values_map`, `index`, `create_time`, `update_time`) |
||||||
|
VALUES(162, 4, 31, NULL, 7, current_timestamp, current_timestamp); |
Loading…
Reference in new issue