Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Greenplum
Gpdb
提交
2d6599f4
G
Gpdb
项目概览
Greenplum
/
Gpdb
通知
7
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
Gpdb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2d6599f4
编写于
7月 11, 2008
作者:
T
Teodor Sigaev
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add caching of query to GIN/GiST consistent function.
Per performance gripe from nomao.com
上级
e3afbb35
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
48 addition
and
6 deletion
+48
-6
contrib/pg_trgm/trgm_gin.c
contrib/pg_trgm/trgm_gin.c
+28
-4
contrib/pg_trgm/trgm_gist.c
contrib/pg_trgm/trgm_gist.c
+20
-2
未找到文件。
contrib/pg_trgm/trgm_gin.c
浏览文件 @
2d6599f4
/*
* $PostgreSQL: pgsql/contrib/pg_trgm/trgm_gin.c,v 1.
4 2008/05/17 01:28:21 adunstan
Exp $
* $PostgreSQL: pgsql/contrib/pg_trgm/trgm_gin.c,v 1.
5 2008/07/11 11:56:48 teodor
Exp $
*/
#include "trgm.h"
...
...
@@ -52,6 +52,16 @@ gin_extract_trgm(PG_FUNCTION_ARGS)
PG_RETURN_POINTER
(
entries
);
}
/*
* Per call strage for consistent functions to
* cache computed value from query
*/
typedef
struct
PerCallConsistentStorage
{
int
trglen
;
text
data
[
1
];
/* query */
}
PerCallConsistentStorage
;
#define PCCSHDR_SZ offsetof(PerCallConsistentStorage, data)
Datum
gin_trgm_consistent
(
PG_FUNCTION_ARGS
)
{
...
...
@@ -60,16 +70,30 @@ gin_trgm_consistent(PG_FUNCTION_ARGS)
text
*
query
=
PG_GETARG_TEXT_P
(
2
);
bool
*
recheck
=
(
bool
*
)
PG_GETARG_POINTER
(
3
);
bool
res
=
FALSE
;
TRGM
*
trg
;
int4
i
,
trglen
,
ntrue
=
0
;
PerCallConsistentStorage
*
pccs
=
(
PerCallConsistentStorage
*
)
fcinfo
->
flinfo
->
fn_extra
;
/* All cases served by this function are inexact */
*
recheck
=
true
;
trg
=
generate_trgm
(
VARDATA
(
query
),
VARSIZE
(
query
)
-
VARHDRSZ
);
trglen
=
ARRNELEM
(
trg
);
if
(
pccs
==
NULL
||
VARSIZE
(
pccs
->
data
)
!=
VARSIZE
(
query
)
||
memcmp
(
pccs
->
data
,
query
,
VARSIZE
(
query
)
)
!=
0
)
{
TRGM
*
trg
=
generate_trgm
(
VARDATA
(
query
),
VARSIZE
(
query
)
-
VARHDRSZ
);
if
(
pccs
)
pfree
(
pccs
);
fcinfo
->
flinfo
->
fn_extra
=
MemoryContextAlloc
(
fcinfo
->
flinfo
->
fn_mcxt
,
VARSIZE
(
query
)
+
PCCSHDR_SZ
);
pccs
=
(
PerCallConsistentStorage
*
)
fcinfo
->
flinfo
->
fn_extra
;
pccs
->
trglen
=
ARRNELEM
(
trg
);
memcpy
(
pccs
->
data
,
query
,
VARSIZE
(
query
)
);
}
trglen
=
pccs
->
trglen
;
for
(
i
=
0
;
i
<
trglen
;
i
++
)
if
(
check
[
i
])
...
...
contrib/pg_trgm/trgm_gist.c
浏览文件 @
2d6599f4
/*
* $PostgreSQL: pgsql/contrib/pg_trgm/trgm_gist.c,v 1.1
4 2008/05/17 01:28:21 adunstan
Exp $
* $PostgreSQL: pgsql/contrib/pg_trgm/trgm_gist.c,v 1.1
5 2008/07/11 11:56:48 teodor
Exp $
*/
#include "trgm.h"
...
...
@@ -168,12 +168,30 @@ gtrgm_consistent(PG_FUNCTION_ARGS)
/* Oid subtype = PG_GETARG_OID(3); */
bool
*
recheck
=
(
bool
*
)
PG_GETARG_POINTER
(
4
);
TRGM
*
key
=
(
TRGM
*
)
DatumGetPointer
(
entry
->
key
);
TRGM
*
qtrg
=
generate_trgm
(
VARDATA
(
query
),
VARSIZE
(
query
)
-
VARHDRSZ
)
;
TRGM
*
qtrg
;
bool
res
=
false
;
char
*
cache
=
(
char
*
)
fcinfo
->
flinfo
->
fn_extra
;
/* All cases served by this function are exact */
*
recheck
=
false
;
if
(
cache
==
NULL
||
VARSIZE
(
cache
)
!=
VARSIZE
(
query
)
||
memcmp
(
cache
,
query
,
VARSIZE
(
query
)
)
!=
0
)
{
qtrg
=
generate_trgm
(
VARDATA
(
query
),
VARSIZE
(
query
)
-
VARHDRSZ
);
if
(
cache
)
pfree
(
cache
);
fcinfo
->
flinfo
->
fn_extra
=
MemoryContextAlloc
(
fcinfo
->
flinfo
->
fn_mcxt
,
MAXALIGN
(
VARSIZE
(
query
))
+
VARSIZE
(
qtrg
)
);
cache
=
(
char
*
)
fcinfo
->
flinfo
->
fn_extra
;
memcpy
(
cache
,
query
,
VARSIZE
(
query
)
);
memcpy
(
cache
+
MAXALIGN
(
VARSIZE
(
query
)),
qtrg
,
VARSIZE
(
qtrg
)
);
}
qtrg
=
(
TRGM
*
)(
cache
+
MAXALIGN
(
VARSIZE
(
query
))
);
if
(
GIST_LEAF
(
entry
))
{
/* all leafs contains orig trgm */
float4
tmpsml
=
cnt_sml
(
key
,
qtrg
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录