Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbd5ef18

Browse files
committed
Replace strings with their hashes.
1 parentd0b6840 commitbd5ef18

File tree

1 file changed

+17
-15
lines changed

1 file changed

+17
-15
lines changed

‎jsonb_gin_ops.c

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,9 @@ typedef struct
2626

2727
#defineGINKEYLEN offsetof(GINKey, data)
2828

29-
#defineGINKeyLenString(len) (offsetof(GINKey, data) +len)
29+
#defineGINKeyLenString (INTALIGN(offsetof(GINKey, data)) +sizeof(uint32))
3030
#defineGINKeyLenNumeric(len) (INTALIGN(offsetof(GINKey, data)) + len)
31-
#defineGINKeyStringLen(key) (VARSIZE(key) - offsetof(GINKey, data))
32-
#defineGINKeyDataString(key) ((key)->data)
31+
#defineGINKeyDataString(key) (*(uint32 *)((Pointer)key + INTALIGN(offsetof(GINKey, data))))
3332
#defineGINKeyDataNumeric(key) ((Pointer)key + INTALIGN(offsetof(GINKey, data)))
3433
#defineGINKeyType(key) ((key)->type & 0x7F)
3534
#defineGINKeyIsTrue(key) ((key)->type & 0x80)
@@ -220,10 +219,7 @@ log_gin_key(GINKey *key)
220219
}
221220
elseif (GINKeyType(key)==jbvString)
222221
{
223-
char*s= (char*)palloc(GINKeyStringLen(key)+1);
224-
s[GINKeyStringLen(key)]='\0';
225-
memcpy(s,GINKeyDataString(key),GINKeyStringLen(key));
226-
elog(NOTICE,"hash = %X, \"%s\"",key->hash,s);
222+
elog(NOTICE,"hash = %X, %X",key->hash,GINKeyDataString(key));
227223
}
228224
else
229225
{
@@ -258,10 +254,11 @@ make_gin_key(JsonbValue *v, uint32 hash)
258254
}
259255
elseif (v->type==jbvString)
260256
{
261-
key= (GINKey*)palloc(GINKeyLenString(v->val.string.len));
257+
key= (GINKey*)palloc(GINKeyLenString);
262258
key->type=v->type;
263-
memcpy(GINKeyDataString(key),v->val.string.val,v->val.string.len);
264-
SET_VARSIZE(key,GINKeyLenString(v->val.string.len));
259+
GINKeyDataString(key)=hash_any((unsignedchar*)v->val.string.val,
260+
v->val.string.len);
261+
SET_VARSIZE(key,GINKeyLenString);
265262
}
266263
else
267264
{
@@ -288,10 +285,11 @@ make_gin_query_key(JsQueryValue *value, uint32 hash)
288285
break;
289286
casejqiString:
290287
read_int32(len,jqBase,jqPos);
291-
key= (GINKey*)palloc(GINKeyLenString(len));
288+
key= (GINKey*)palloc(GINKeyLenString);
292289
key->type=jbvString;
293-
memcpy(GINKeyDataString(key),jqBase+jqPos,len);
294-
SET_VARSIZE(key,GINKeyLenString(len));
290+
GINKeyDataString(key)=hash_any((unsignedchar*)jqBase+jqPos,
291+
len);
292+
SET_VARSIZE(key,GINKeyLenString);
295293
break;
296294
casejqiBool:
297295
read_byte(len,jqBase,jqPos);
@@ -411,8 +409,12 @@ compare_gin_key_value(GINKey *arg1, GINKey *arg2)
411409
PointerGetDatum(GINKeyDataNumeric(arg1)),
412410
PointerGetDatum(GINKeyDataNumeric(arg2))));
413411
casejbvString:
414-
returnvarstr_cmp(GINKeyDataString(arg1),GINKeyStringLen(arg1),
415-
GINKeyDataString(arg2),GINKeyStringLen(arg2),C_COLLATION_OID);
412+
if (GINKeyDataString(arg1)<GINKeyDataString(arg2))
413+
return-1;
414+
elseif (GINKeyDataString(arg1)==GINKeyDataString(arg2))
415+
return0;
416+
else
417+
return1;
416418
default:
417419
elog(ERROR,"GINKey must be scalar");
418420
return0;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp