Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
带水的鱼儿
spring-framework
提交
fab7b1ce
S
spring-framework
项目概览
带水的鱼儿
/
spring-framework
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
fab7b1ce
编写于
5月 17, 2021
作者:
S
Sam Brannen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Polish ScriptUtils internals in spring-r2dbc
See gh-26947
上级
101ed17b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
32 addition
and
49 deletion
+32
-49
spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/ScriptUtils.java
...rg/springframework/r2dbc/connection/init/ScriptUtils.java
+18
-23
spring-r2dbc/src/test/java/org/springframework/r2dbc/connection/init/ScriptUtilsUnitTests.java
...framework/r2dbc/connection/init/ScriptUtilsUnitTests.java
+14
-26
未找到文件。
spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/init/ScriptUtils.java
浏览文件 @
fab7b1ce
...
...
@@ -106,8 +106,8 @@ public abstract class ScriptUtils {
/**
* Split an SQL script into separate statements delimited by the provided
* separator string
. Each individual statement will be added to the provided
*
{@code List}
.
* separator string
and return a {@code List} containing each individual
*
statement
.
* <p>Within the script, the provided {@code commentPrefixes} will be honored:
* any text beginning with one of the comment prefixes and extending to the
* end of the line will be omitted from the output. Similarly, the provided
...
...
@@ -125,12 +125,12 @@ public abstract class ScriptUtils {
* never {@code null} or empty
* @param blockCommentEndDelimiter the <em>end</em> block comment delimiter;
* never {@code null} or empty
* @
param statements the list that will contain the individual
statements
* @
return a list of
statements
* @throws ScriptException if an error occurred while splitting the SQL script
*/
static
void
splitSqlScript
(
@Nullable
EncodedResource
resource
,
String
script
,
static
List
<
String
>
splitSqlScript
(
EncodedResource
resource
,
String
script
,
String
separator
,
String
[]
commentPrefixes
,
String
blockCommentStartDelimiter
,
String
blockCommentEndDelimiter
,
List
<
String
>
statements
)
throws
ScriptException
{
String
blockCommentEndDelimiter
)
throws
ScriptException
{
Assert
.
hasText
(
script
,
"'script' must not be null or empty"
);
Assert
.
notNull
(
separator
,
"'separator' must not be null"
);
...
...
@@ -141,6 +141,7 @@ public abstract class ScriptUtils {
Assert
.
hasText
(
blockCommentStartDelimiter
,
"'blockCommentStartDelimiter' must not be null or empty"
);
Assert
.
hasText
(
blockCommentEndDelimiter
,
"'blockCommentEndDelimiter' must not be null or empty"
);
List
<
String
>
statements
=
new
ArrayList
<>();
StringBuilder
sb
=
new
StringBuilder
();
boolean
inSingleQuote
=
false
;
boolean
inDoubleQuote
=
false
;
...
...
@@ -215,26 +216,22 @@ public abstract class ScriptUtils {
if
(
StringUtils
.
hasText
(
sb
))
{
statements
.
add
(
sb
.
toString
());
}
return
statements
;
}
/**
* Read a script from the provided resource, using the supplied comment prefixes
* and statement separator, and build a {@code String} containing the lines.
* <p>Lines <em>beginning</em> with one of the comment prefixes are excluded
* from the results; however, line comments anywhere else — for example,
* within a statement — will be included in the results.
* @param resource the {@code EncodedResource} containing the script
* to be processed
* Read a script from the provided resource, using the supplied statement
* separator, and build a {@code String} containing the lines.
* @param resource the {@code EncodedResource} containing the script to be
* processed
* @param dataBufferFactory the factory to create data buffers with
* @param separator the statement separator in the SQL script (typically ";")
* @param commentPrefixes the prefixes that identify comments in the SQL script
* (typically "--")
* @param blockCommentEndDelimiter the <em>end</em> block comment delimiter
* @return a {@link Mono} of {@link String} containing the script lines that
* completes once the resource
was
loaded
* completes once the resource
has been
loaded
*/
static
Mono
<
String
>
readScript
(
EncodedResource
resource
,
DataBufferFactory
dataBufferFactory
,
@Nullable
String
separator
,
@Nullable
String
[]
commentPrefixes
,
@Nullable
String
blockCommentEndDelimiter
)
{
@Nullable
String
separator
)
{
return
DataBufferUtils
.
join
(
DataBufferUtils
.
read
(
resource
.
getResource
(),
dataBufferFactory
,
8192
))
.
handle
((
it
,
sink
)
->
{
...
...
@@ -322,7 +319,7 @@ public abstract class ScriptUtils {
* (typically <code>"*/"</code>)
* @since 5.3.8
*/
static
boolean
containsStatementSeparator
(
@Nullable
EncodedResource
resource
,
String
script
,
static
boolean
containsStatementSeparator
(
EncodedResource
resource
,
String
script
,
String
separator
,
String
[]
commentPrefixes
,
String
blockCommentStartDelimiter
,
String
blockCommentEndDelimiter
)
throws
ScriptException
{
...
...
@@ -514,13 +511,12 @@ public abstract class ScriptUtils {
long
startTime
=
System
.
currentTimeMillis
();
Mono
<
String
>
inputScript
=
readScript
(
resource
,
dataBufferFactory
,
separator
,
commentPrefixes
,
blockCommentEndDelimiter
)
Mono
<
String
>
inputScript
=
readScript
(
resource
,
dataBufferFactory
,
separator
)
.
onErrorMap
(
IOException
.
class
,
ex
->
new
CannotReadScriptException
(
resource
,
ex
));
AtomicInteger
statementNumber
=
new
AtomicInteger
();
Flux
<
Void
>
executeScript
=
inputScript
.
flatMapIterable
(
script
->
{
List
<
String
>
statements
=
new
ArrayList
<>();
String
separatorToUse
=
separator
;
if
(
separatorToUse
==
null
)
{
separatorToUse
=
DEFAULT_STATEMENT_SEPARATOR
;
...
...
@@ -530,9 +526,8 @@ public abstract class ScriptUtils {
blockCommentStartDelimiter
,
blockCommentEndDelimiter
))
{
separatorToUse
=
FALLBACK_STATEMENT_SEPARATOR
;
}
splitSqlScript
(
resource
,
script
,
separatorToUse
,
commentPrefixes
,
blockCommentStartDelimiter
,
blockCommentEndDelimiter
,
statements
);
return
statements
;
return
splitSqlScript
(
resource
,
script
,
separatorToUse
,
commentPrefixes
,
blockCommentStartDelimiter
,
blockCommentEndDelimiter
);
}).
concatMap
(
statement
->
{
statementNumber
.
incrementAndGet
();
return
runStatement
(
statement
,
connection
,
resource
,
continueOnError
,
ignoreFailedDrops
,
statementNumber
);
...
...
spring-r2dbc/src/test/java/org/springframework/r2dbc/connection/init/ScriptUtilsUnitTests.java
浏览文件 @
fab7b1ce
...
...
@@ -16,7 +16,6 @@
package
org.springframework.r2dbc.connection.init
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.assertj.core.util.Strings
;
...
...
@@ -60,8 +59,7 @@ public class ScriptUtilsUnitTests {
String
delimiter
=
";"
;
String
script
=
Strings
.
join
(
rawStatement1
,
rawStatement2
,
rawStatement3
).
with
(
delimiter
);
List
<
String
>
statements
=
new
ArrayList
<>();
splitSqlScript
(
script
,
delimiter
,
statements
);
List
<
String
>
statements
=
splitSqlScript
(
script
,
delimiter
);
assertThat
(
statements
).
containsExactly
(
cleanedStatement1
,
cleanedStatement2
,
cleanedStatement3
);
}
...
...
@@ -75,8 +73,7 @@ public class ScriptUtilsUnitTests {
String
delimiter
=
"\n"
;
String
script
=
Strings
.
join
(
statement1
,
statement2
,
statement3
).
with
(
delimiter
);
List
<
String
>
statements
=
new
ArrayList
<>();
splitSqlScript
(
script
,
delimiter
,
statements
);
List
<
String
>
statements
=
splitSqlScript
(
script
,
delimiter
);
assertThat
(
statements
).
containsExactly
(
statement1
,
statement2
,
statement3
);
}
...
...
@@ -88,9 +85,7 @@ public class ScriptUtilsUnitTests {
String
script
=
Strings
.
join
(
statement1
,
statement2
).
with
(
"\n"
);
List
<
String
>
statements
=
new
ArrayList
<>();
splitSqlScript
(
script
,
DEFAULT_STATEMENT_SEPARATOR
,
statements
);
List
<
String
>
statements
=
splitSqlScript
(
script
,
DEFAULT_STATEMENT_SEPARATOR
);
assertThat
(
statements
).
as
(
"stripped but not split statements"
).
containsExactly
(
script
.
replace
(
'\n'
,
' '
));
}
...
...
@@ -103,8 +98,7 @@ public class ScriptUtilsUnitTests {
String
delimiter
=
";"
;
String
script
=
Strings
.
join
(
statement1
,
statement2
).
with
(
delimiter
);
List
<
String
>
statements
=
new
ArrayList
<>();
splitSqlScript
(
script
,
delimiter
,
statements
);
List
<
String
>
statements
=
splitSqlScript
(
script
,
delimiter
);
assertThat
(
statements
).
containsExactly
(
statement1
,
statement2
);
}
...
...
@@ -112,8 +106,7 @@ public class ScriptUtilsUnitTests {
@Test
// SPR-11560
public
void
readAndSplitScriptWithMultipleNewlinesAsSeparator
()
throws
Exception
{
String
script
=
readScript
(
"db-test-data-multi-newline.sql"
);
List
<
String
>
statements
=
new
ArrayList
<>();
splitSqlScript
(
script
,
"\n\n"
,
statements
);
List
<
String
>
statements
=
splitSqlScript
(
script
,
"\n\n"
);
String
statement1
=
"insert into T_TEST (NAME) values ('Keith')"
;
String
statement2
=
"insert into T_TEST (NAME) values ('Dave')"
;
...
...
@@ -140,9 +133,8 @@ public class ScriptUtilsUnitTests {
}
private
void
splitScriptContainingComments
(
String
script
,
String
...
commentPrefixes
)
{
List
<
String
>
statements
=
new
ArrayList
<>();
ScriptUtils
.
splitSqlScript
(
null
,
script
,
";"
,
commentPrefixes
,
DEFAULT_BLOCK_COMMENT_START_DELIMITER
,
DEFAULT_BLOCK_COMMENT_END_DELIMITER
,
statements
);
List
<
String
>
statements
=
ScriptUtils
.
splitSqlScript
(
null
,
script
,
";"
,
commentPrefixes
,
DEFAULT_BLOCK_COMMENT_START_DELIMITER
,
DEFAULT_BLOCK_COMMENT_END_DELIMITER
);
String
statement1
=
"insert into customer (id, name) values (1, 'Rod; Johnson'), (2, 'Adrian Collier')"
;
String
statement2
=
"insert into orders(id, order_date, customer_id) values (1, '2008-01-02', 2)"
;
...
...
@@ -156,8 +148,7 @@ public class ScriptUtilsUnitTests {
@Test
// SPR-10330
public
void
readAndSplitScriptContainingCommentsWithLeadingTabs
()
throws
Exception
{
String
script
=
readScript
(
"test-data-with-comments-and-leading-tabs.sql"
);
List
<
String
>
statements
=
new
ArrayList
<>();
splitSqlScript
(
script
,
";"
,
statements
);
List
<
String
>
statements
=
splitSqlScript
(
script
,
";"
);
String
statement1
=
"insert into customer (id, name) values (1, 'Sam Brannen')"
;
String
statement2
=
"insert into orders(id, order_date, customer_id) values (1, '2013-06-08', 1)"
;
...
...
@@ -169,8 +160,7 @@ public class ScriptUtilsUnitTests {
@Test
// SPR-9531
public
void
readAndSplitScriptContainingMultiLineComments
()
throws
Exception
{
String
script
=
readScript
(
"test-data-with-multi-line-comments.sql"
);
List
<
String
>
statements
=
new
ArrayList
<>();
splitSqlScript
(
script
,
";"
,
statements
);
List
<
String
>
statements
=
splitSqlScript
(
script
,
";"
);
String
statement1
=
"INSERT INTO users(first_name, last_name) VALUES('Juergen', 'Hoeller')"
;
String
statement2
=
"INSERT INTO users(first_name, last_name) VALUES( 'Sam' , 'Brannen' )"
;
...
...
@@ -181,8 +171,7 @@ public class ScriptUtilsUnitTests {
@Test
public
void
readAndSplitScriptContainingMultiLineNestedComments
()
throws
Exception
{
String
script
=
readScript
(
"test-data-with-multi-line-nested-comments.sql"
);
List
<
String
>
statements
=
new
ArrayList
<>();
splitSqlScript
(
script
,
";"
,
statements
);
List
<
String
>
statements
=
splitSqlScript
(
script
,
";"
);
String
statement1
=
"INSERT INTO users(first_name, last_name) VALUES('Juergen', 'Hoeller')"
;
String
statement2
=
"INSERT INTO users(first_name, last_name) VALUES( 'Sam' , 'Brannen' )"
;
...
...
@@ -231,13 +220,12 @@ public class ScriptUtilsUnitTests {
private
String
readScript
(
String
path
)
throws
Exception
{
EncodedResource
resource
=
new
EncodedResource
(
new
ClassPathResource
(
path
,
getClass
()));
return
ScriptUtils
.
readScript
(
resource
,
DefaultDataBufferFactory
.
sharedInstance
,
DEFAULT_STATEMENT_SEPARATOR
,
DEFAULT_COMMENT_PREFIXES
,
DEFAULT_BLOCK_COMMENT_END_DELIMITER
).
block
();
return
ScriptUtils
.
readScript
(
resource
,
DefaultDataBufferFactory
.
sharedInstance
,
DEFAULT_STATEMENT_SEPARATOR
).
block
();
}
private
static
void
splitSqlScript
(
String
script
,
String
separator
,
List
<
String
>
statements
)
throws
ScriptException
{
ScriptUtils
.
splitSqlScript
(
null
,
script
,
separator
,
DEFAULT_COMMENT_PREFIXES
,
DEFAULT_BLOCK_COMMENT_START_DELIMITER
,
DEFAULT_BLOCK_COMMENT_END_DELIMITER
,
statements
);
private
static
List
<
String
>
splitSqlScript
(
String
script
,
String
separator
)
throws
ScriptException
{
return
ScriptUtils
.
splitSqlScript
(
null
,
script
,
separator
,
DEFAULT_COMMENT_PREFIXES
,
DEFAULT_BLOCK_COMMENT_START_DELIMITER
,
DEFAULT_BLOCK_COMMENT_END_DELIMITER
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录