Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
82c28ec0
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
82c28ec0
编写于
8月 16, 2019
作者:
R
Ryuta Kamizono
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Merge pull request #36932 from kirs/mysql2-filsort-abort
Improve MySQL error detection
上级
c3841e3e
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
22 addition
and
1 deletion
+22
-1
activerecord/CHANGELOG.md
activerecord/CHANGELOG.md
+5
-0
activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
...tive_record/connection_adapters/abstract_mysql_adapter.rb
+2
-1
activerecord/test/cases/adapters/mysql2/mysql2_adapter_test.rb
...erecord/test/cases/adapters/mysql2/mysql2_adapter_test.rb
+15
-0
未找到文件。
activerecord/CHANGELOG.md
浏览文件 @
82c28ec0
*
Improve detection of ActiveRecord::StatementTimeout with mysql2 adapter in the edge case when the query is terminated during filesort.
*Kir Shatrov*
## Rails 6.0.0 (August 16, 2019) ##
*
Preserve user supplied joins order as much as possible.
...
...
activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
浏览文件 @
82c28ec0
...
...
@@ -581,6 +581,7 @@ def extract_precision(sql_type)
end
# See https://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html
ER_FILSORT_ABORT
=
1028
ER_DUP_ENTRY
=
1062
ER_NOT_NULL_VIOLATION
=
1048
ER_NO_REFERENCED_ROW
=
1216
...
...
@@ -622,7 +623,7 @@ def translate_exception(exception, message:, sql:, binds:)
Deadlocked
.
new
(
message
,
sql:
sql
,
binds:
binds
)
when
ER_LOCK_WAIT_TIMEOUT
LockWaitTimeout
.
new
(
message
,
sql:
sql
,
binds:
binds
)
when
ER_QUERY_TIMEOUT
when
ER_QUERY_TIMEOUT
,
ER_FILSORT_ABORT
StatementTimeout
.
new
(
message
,
sql:
sql
,
binds:
binds
)
when
ER_QUERY_INTERRUPTED
QueryCanceled
.
new
(
message
,
sql:
sql
,
binds:
binds
)
...
...
activerecord/test/cases/adapters/mysql2/mysql2_adapter_test.rb
浏览文件 @
82c28ec0
...
...
@@ -225,6 +225,21 @@ def test_doesnt_error_when_a_read_query_with_leading_chars_is_called_while_preve
end
end
def
test_statement_timeout_error_codes
raw_conn
=
@conn
.
raw_connection
assert_raises
(
ActiveRecord
::
StatementTimeout
)
do
raw_conn
.
stub
(
:query
,
->
(
_sql
)
{
raise
Mysql2
::
Error
.
new
(
"fail"
,
50700
,
ActiveRecord
::
ConnectionAdapters
::
AbstractMysqlAdapter
::
ER_FILSORT_ABORT
)
})
{
@conn
.
execute
(
"SELECT 1"
)
}
end
assert_raises
(
ActiveRecord
::
StatementTimeout
)
do
raw_conn
.
stub
(
:query
,
->
(
_sql
)
{
raise
Mysql2
::
Error
.
new
(
"fail"
,
50700
,
ActiveRecord
::
ConnectionAdapters
::
AbstractMysqlAdapter
::
ER_QUERY_TIMEOUT
)
})
{
@conn
.
execute
(
"SELECT 1"
)
}
end
end
private
def
with_example_table
(
definition
=
"id int auto_increment primary key, number int, data varchar(255)"
,
&
block
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录