Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
f9e27bc5
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 搜索 >>
提交
f9e27bc5
编写于
5月 18, 2015
作者:
R
Ryuta Kamizono
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Eliminate the duplication code of `StatementPool`
上级
7fb90694
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
36 addition
and
92 deletion
+36
-92
activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
...rd/lib/active_record/connection_adapters/mysql_adapter.rb
+8
-29
activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
...b/active_record/connection_adapters/postgresql_adapter.rb
+1
-27
activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
.../lib/active_record/connection_adapters/sqlite3_adapter.rb
+1
-28
activerecord/lib/active_record/connection_adapters/statement_pool.rb
...d/lib/active_record/connection_adapters/statement_pool.rb
+26
-8
未找到文件。
activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
浏览文件 @
f9e27bc5
...
...
@@ -71,34 +71,10 @@ class MysqlAdapter < AbstractMysqlAdapter
ADAPTER_NAME
=
'MySQL'
.
freeze
class
StatementPool
<
ConnectionAdapters
::
StatementPool
def
initialize
(
connection
,
max
=
1000
)
super
@cache
=
Hash
.
new
{
|
h
,
pid
|
h
[
pid
]
=
{}
}
end
def
each
(
&
block
);
cache
.
each
(
&
block
);
end
def
key?
(
key
);
cache
.
key?
(
key
);
end
def
[]
(
key
);
cache
[
key
];
end
def
length
;
cache
.
length
;
end
def
delete
(
key
);
cache
.
delete
(
key
);
end
def
[]=
(
sql
,
key
)
while
@max
<=
cache
.
size
cache
.
shift
.
last
[
:stmt
].
close
end
cache
[
sql
]
=
key
end
def
clear
cache
.
each_value
do
|
hash
|
hash
[
:stmt
].
close
end
cache
.
clear
end
private
def
cache
@cache
[
Process
.
pid
]
def
dealloc
(
stmt
)
stmt
[
:stmt
].
close
end
end
...
...
@@ -416,8 +392,11 @@ def exec_stmt(sql, name, binds)
# place when an error occurs. To support older MySQL versions, we
# need to close the statement and delete the statement from the
# cache.
stmt
.
close
@statements
.
delete
sql
if
binds
.
empty?
stmt
.
close
else
@statements
.
delete
sql
end
raise
e
end
...
...
activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
浏览文件 @
f9e27bc5
...
...
@@ -211,44 +211,18 @@ class StatementPool < ConnectionAdapters::StatementPool
def
initialize
(
connection
,
max
)
super
@counter
=
0
@cache
=
Hash
.
new
{
|
h
,
pid
|
h
[
pid
]
=
{}
}
end
def
each
(
&
block
);
cache
.
each
(
&
block
);
end
def
key?
(
key
);
cache
.
key?
(
key
);
end
def
[]
(
key
);
cache
[
key
];
end
def
length
;
cache
.
length
;
end
def
next_key
"a
#{
@counter
+
1
}
"
end
def
[]=
(
sql
,
key
)
while
@max
<=
cache
.
size
dealloc
(
cache
.
shift
.
last
)
end
@counter
+=
1
cache
[
sql
]
=
key
end
def
clear
cache
.
each_value
do
|
stmt_key
|
dealloc
stmt_key
end
cache
.
clear
end
def
delete
(
sql_key
)
dealloc
cache
[
sql_key
]
cache
.
delete
sql_key
super
.
tap
{
@counter
+=
1
}
end
private
def
cache
@cache
[
Process
.
pid
]
end
def
dealloc
(
key
)
@connection
.
query
"DEALLOCATE
#{
key
}
"
if
connection_active?
end
...
...
activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
浏览文件 @
f9e27bc5
...
...
@@ -78,37 +78,10 @@ def <=>(version_string)
end
class
StatementPool
<
ConnectionAdapters
::
StatementPool
def
initialize
(
connection
,
max
)
super
@cache
=
Hash
.
new
{
|
h
,
pid
|
h
[
pid
]
=
{}
}
end
def
each
(
&
block
);
cache
.
each
(
&
block
);
end
def
key?
(
key
);
cache
.
key?
(
key
);
end
def
[]
(
key
);
cache
[
key
];
end
def
length
;
cache
.
length
;
end
def
[]=
(
sql
,
key
)
while
@max
<=
cache
.
size
dealloc
(
cache
.
shift
.
last
[
:stmt
])
end
cache
[
sql
]
=
key
end
def
clear
cache
.
each_value
do
|
hash
|
dealloc
hash
[
:stmt
]
end
cache
.
clear
end
private
def
cache
@cache
[
$$
]
end
def
dealloc
(
stmt
)
stmt
.
close
unless
stmt
.
closed?
stmt
[
:stmt
].
close
unless
stmt
[
:stmt
]
.
closed?
end
end
...
...
activerecord/lib/active_record/connection_adapters/statement_pool.rb
浏览文件 @
f9e27bc5
...
...
@@ -4,35 +4,53 @@ class StatementPool
include
Enumerable
def
initialize
(
connection
,
max
=
1000
)
@cache
=
Hash
.
new
{
|
h
,
pid
|
h
[
pid
]
=
{}
}
@connection
=
connection
@max
=
max
end
def
each
raise
NotImplementedError
def
each
(
&
block
)
cache
.
each
(
&
block
)
end
def
key?
(
key
)
raise
NotImplementedError
cache
.
key?
(
key
)
end
def
[]
(
key
)
raise
NotImplementedError
cache
[
key
]
end
def
length
raise
NotImplementedError
cache
.
length
end
def
[]=
(
sql
,
key
)
raise
NotImplementedError
def
[]=
(
sql
,
stmt
)
while
@max
<=
cache
.
size
dealloc
(
cache
.
shift
.
last
)
end
cache
[
sql
]
=
stmt
end
def
clear
raise
NotImplementedError
cache
.
each_value
do
|
stmt
|
dealloc
stmt
end
cache
.
clear
end
def
delete
(
key
)
dealloc
cache
[
key
]
cache
.
delete
(
key
)
end
private
def
cache
@cache
[
Process
.
pid
]
end
def
dealloc
(
stmt
)
raise
NotImplementedError
end
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录