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

Commit3e90401

Browse files
committed
*** empty log message ***
1 parent91778e8 commit3e90401

File tree

1 file changed

+145
-4
lines changed

1 file changed

+145
-4
lines changed

‎src/backend/utils/adt/oracle_compat.c

Lines changed: 145 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
*Edmund Mergl <E.Mergl@bawue.de>
33
*
4-
*$Header: /cvsroot/pgsql/src/backend/utils/adt/oracle_compat.c,v 1.32 2001/09/14 17:46:40 momjian Exp $
4+
*$Header: /cvsroot/pgsql/src/backend/utils/adt/oracle_compat.c,v 1.33 2001/09/22 03:26:30 ishii Exp $
55
*
66
*/
77

@@ -11,6 +11,9 @@
1111

1212
#include"utils/builtins.h"
1313

14+
#ifdefMULTIBYTE
15+
#include"mb/pg_wchar.h"
16+
#endif
1417

1518
/********************************************************************
1619
*
@@ -304,14 +307,82 @@ btrim(PG_FUNCTION_ARGS)
304307
*end2;
305308
intm;
306309

310+
#ifdefMULTIBYTE
311+
char**mp;
312+
intmplen;
313+
char*p;
314+
intmblen;
315+
intlen;
316+
#endif
317+
307318
if ((m=VARSIZE(string)-VARHDRSZ) <=0||
308319
(VARSIZE(set)-VARHDRSZ) <=0)
309320
PG_RETURN_TEXT_P(string);
310321

311322
ptr=VARDATA(string);
323+
324+
#ifdefMULTIBYTE
325+
len=m;
326+
mp= (char**)palloc(len*sizeof(char*));
327+
p=ptr;
328+
mplen=0;
329+
330+
/* build the mb pointer array */
331+
while (len>0)
332+
{
333+
mp[mplen++]=p;
334+
mblen=pg_mblen(p);
335+
p+=mblen;
336+
len-=mblen;
337+
}
338+
mplen--;
339+
#else
312340
end=VARDATA(string)+VARSIZE(string)-VARHDRSZ-1;
341+
#endif
313342
end2=VARDATA(set)+VARSIZE(set)-VARHDRSZ-1;
314343

344+
#ifdefMULTIBYTE
345+
while (m>0)
346+
{
347+
intstr_len=pg_mblen(ptr);
348+
ptr2=VARDATA(set);
349+
while (ptr2 <=end2)
350+
{
351+
intset_len=pg_mblen(ptr2);
352+
353+
if (str_len==set_len&&
354+
memcmp(ptr,ptr2,str_len)==0)
355+
break;
356+
ptr2+=set_len;
357+
}
358+
if (ptr2>end2)
359+
break;
360+
ptr+=str_len;
361+
m-=str_len;
362+
}
363+
364+
while (m>0)
365+
{
366+
intstr_len;
367+
end=mp[mplen--];
368+
str_len=pg_mblen(end);
369+
ptr2=VARDATA(set);
370+
while (ptr2 <=end2)
371+
{
372+
intset_len=pg_mblen(ptr2);
373+
374+
if (str_len==set_len&&
375+
memcmp(end,ptr2,str_len)==0)
376+
break;
377+
ptr2+=set_len;
378+
}
379+
if (ptr2>end2)
380+
break;
381+
m-=str_len;
382+
}
383+
pfree(mp);
384+
385+
#else
315386
while (m>0)
316387
{
317388
ptr2=VARDATA(set);
@@ -341,7 +412,7 @@ btrim(PG_FUNCTION_ARGS)
341412
end--;
342413
m--;
343414
}
344-
415+
#endif
345416
ret= (text*)palloc(VARHDRSZ+m);
346417
VARATT_SIZEP(ret)=VARHDRSZ+m;
347418
memcpy(VARDATA(ret),ptr,m);
@@ -455,6 +526,26 @@ ltrim(PG_FUNCTION_ARGS)
455526
ptr=VARDATA(string);
456527
end2=VARDATA(set)+VARSIZE(set)-VARHDRSZ-1;
457528

529+
#ifdefMULTIBYTE
530+
while (m>0)
531+
{
532+
intstr_len=pg_mblen(ptr);
533+
ptr2=VARDATA(set);
534+
while (ptr2 <=end2)
535+
{
536+
intset_len=pg_mblen(ptr2);
537+
538+
if (str_len==set_len&&
539+
memcmp(ptr,ptr2,str_len)==0)
540+
break;
541+
ptr2+=set_len;
542+
}
543+
if (ptr2>end2)
544+
break;
545+
ptr+=str_len;
546+
m-=str_len;
547+
}
548+
#else
458549
while (m>0)
459550
{
460551
ptr2=VARDATA(set);
@@ -469,7 +560,7 @@ ltrim(PG_FUNCTION_ARGS)
469560
ptr++;
470561
m--;
471562
}
472-
563+
#endif
473564
ret= (text*)palloc(VARHDRSZ+m);
474565
VARATT_SIZEP(ret)=VARHDRSZ+m;
475566
memcpy(VARDATA(ret),ptr,m);
@@ -499,20 +590,70 @@ rtrim(PG_FUNCTION_ARGS)
499590
text*string=PG_GETARG_TEXT_P(0);
500591
text*set=PG_GETARG_TEXT_P(1);
501592
text*ret;
593+
502594
char*ptr,
503595
*end,
504596
*ptr2,
505597
*end2;
506598
intm;
507599

600+
#ifdefMULTIBYTE
601+
char**mp;
602+
intmplen;
603+
char*p;
604+
intmblen;
605+
intlen;
606+
#endif
607+
508608
if ((m=VARSIZE(string)-VARHDRSZ) <=0||
509609
(VARSIZE(set)-VARHDRSZ) <=0)
510610
PG_RETURN_TEXT_P(string);
511611

512612
ptr=VARDATA(string);
613+
614+
#ifdefMULTIBYTE
615+
len=m;
616+
mp= (char**)palloc(len*sizeof(char*));
617+
p=ptr;
618+
mplen=0;
619+
620+
/* build the mb pointer array */
621+
while (len>0)
622+
{
623+
mp[mplen++]=p;
624+
mblen=pg_mblen(p);
625+
p+=mblen;
626+
len-=mblen;
627+
}
628+
mplen--;
629+
#else
513630
end=VARDATA(string)+VARSIZE(string)-VARHDRSZ-1;
631+
#endif
514632
end2=VARDATA(set)+VARSIZE(set)-VARHDRSZ-1;
515633

634+
#ifdefMULTIBYTE
635+
while (m>0)
636+
{
637+
intstr_len;
638+
end=mp[mplen--];
639+
str_len=pg_mblen(end);
640+
ptr2=VARDATA(set);
641+
while (ptr2 <=end2)
642+
{
643+
intset_len=pg_mblen(ptr2);
644+
645+
if (str_len==set_len&&
646+
memcmp(end,ptr2,str_len)==0)
647+
break;
648+
ptr2+=set_len;
649+
}
650+
if (ptr2>end2)
651+
break;
652+
m-=str_len;
653+
}
654+
pfree(mp);
655+
656+
#else
516657
while (m>0)
517658
{
518659
ptr2=VARDATA(set);
@@ -527,7 +668,7 @@ rtrim(PG_FUNCTION_ARGS)
527668
end--;
528669
m--;
529670
}
530-
671+
#endif
531672
ret= (text*)palloc(VARHDRSZ+m);
532673
VARATT_SIZEP(ret)=VARHDRSZ+m;
533674
memcpy(VARDATA(ret),ptr,m);

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp