Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
aad71de1
Commit
aad71de1
authored
Apr 25, 2003
by
hf@deer.mysql.r18.ru
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Trimming code with Monty's suggestions
parent
8534b43f
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
83 additions
and
91 deletions
+83
-91
strings/ctype-tis620.c
strings/ctype-tis620.c
+83
-91
No files found.
strings/ctype-tis620.c
View file @
aad71de1
...
...
@@ -453,82 +453,78 @@ uchar NEAR sort_order_tis620[]=
Arg: const source string and length of converted string
Ret: Sortable string
*/
/*
NOTE: isn't it faster to alloc buffer in calling function?
*/
static
uchar
*
thai2sortable
(
const
uchar
*
tstr
,
uint
len
)
{
/* We use only 3 levels (neglect capitalization). */
const
uchar
*
p
=
tstr
;
const
uchar
*
p
=
tstr
;
uchar
*
outBuf
;
/* uchar *pRight1, *pRight2, *pRight3, *pRight4; */
/* uchar *pLeft1, *pLeft2, *pLeft3, *pLeft4; */
uchar
*
pRight1
,
*
pRight2
,
*
pRight3
;
uchar
*
pLeft1
,
*
pLeft2
,
*
pLeft3
;
uint
bufSize
;
len
=
(
uint
)
strnlen
((
char
*
)
tstr
,
len
);
bufSize
=
(
uint
)
buffsize
((
char
*
)
tstr
);
if
(
!
(
pRight1
=
(
uchar
*
)
malloc
(
sizeof
(
uchar
)
*
bufSize
)))
{
return
(
(
uchar
*
)
tstr
);
}
pLeft1
=
pRight1
;
outBuf
=
pRight1
;
if
(
!
(
pRight2
=
(
uchar
*
)
malloc
(
sizeof
(
uchar
)
*
(
len
+
1
))))
{
free
(
pRight1
);
return
((
uchar
*
)
tstr
);
}
pLeft2
=
pRight2
;
if
(
!
(
pRight3
=
(
uchar
*
)
malloc
(
sizeof
(
uchar
)
*
(
len
+
1
))))
{
free
(
pRight1
);
free
(
pRight2
);
return
((
uchar
*
)
tstr
);
}
pLeft3
=
pRight3
;
/* if(!(pRight4 = (uchar *)malloc(sizeof(uchar) * (len + 1)))) {
free(pRight1);
free(pRight2);
free(pRight3);
return((uchar*) tstr);
}
pLeft4 = pRight4;*/
while
(
len
--
)
{
if
(
isldvowel
(
*
p
)
&&
len
>
0
&&
isconsnt
(
p
[
1
]))
{
*
pRight1
++
=
t_ctype
[
p
[
1
]][
0
];
*
pRight2
++
=
t_ctype
[
p
[
1
]][
1
];
*
pRight3
++
=
t_ctype
[
p
[
1
]][
2
];
/* *pRight4++ = t_ctype[p[1]][3]; */
*
pRight1
++
=
t_ctype
[
*
p
][
0
];
*
pRight2
++
=
t_ctype
[
*
p
][
1
];
*
pRight3
++
=
t_ctype
[
*
p
][
2
];
/* *pRight4++ = t_ctype[*p][3]; */
uint
RightSize
;
len
=
(
uint
)
strnlen
((
char
*
)
tstr
,
len
);
bufSize
=
(
uint
)
buffsize
((
char
*
)
tstr
);
RightSize
=
sizeof
(
uchar
)
*
(
len
+
1
);
if
(
!
(
outBuf
=
pLeft1
=
pRight1
=
(
uchar
*
)
malloc
(
sizeof
(
uchar
)
*
bufSize
+
RightSize
*
2
)))
return
(
uchar
*
)
tstr
;
pLeft2
=
pRight2
=
pRight1
+
sizeof
(
uchar
)
*
bufSize
;
pLeft3
=
pRight3
=
pRight2
+
RightSize
;
while
(
--
len
)
{
int
*
t_ctype0
=
t_ctype
[
p
[
0
]];
if
(
isldvowel
(
*
p
)
&&
isconsnt
(
p
[
1
]))
{
int
*
t_ctype1
=
t_ctype
[
p
[
1
]];
*
pRight1
++=
t_ctype1
[
0
];
*
pRight2
++=
t_ctype1
[
1
];
*
pRight3
++=
t_ctype1
[
2
];
*
pRight1
++=
t_ctype0
[
0
];
*
pRight2
++=
t_ctype0
[
1
];
*
pRight3
++=
t_ctype0
[
2
];
p
+=
2
;
len
--
;
p
+=
2
;
}
else
{
*
pRight1
=
t_ctype
[
*
p
][
0
];
if
(
*
pRight1
!=
IGNORE
)
pRight1
++
;
*
pRight2
=
t_ctype
[
*
p
][
1
];
if
(
*
pRight2
!=
IGNORE
)
pRight2
++
;
*
pRight3
=
t_ctype
[
*
p
][
2
];
if
(
*
pRight3
!=
IGNORE
)
pRight3
++
;
/* *pRight4 = t_ctype[*p][3];
if(*pRight4 != IGNORE) pRight4++;*/
}
else
{
*
pRight1
=
t_ctype0
[
0
];
if
(
*
pRight1
!=
IGNORE
)
pRight1
++
;
*
pRight2
=
t_ctype0
[
1
];
if
(
*
pRight2
!=
IGNORE
)
pRight2
++
;
*
pRight3
=
t_ctype0
[
2
];
if
(
*
pRight3
!=
IGNORE
)
pRight3
++
;
p
++
;
}
}
*
pRight1
++
=
L2_BLANK
;
*
pRight2
++
=
L3_BLANK
;
/* *pRight3++ = L4_BLANK; */
*
pRight3
++
=
'\0'
;
/* *pRight4++ = '\0'; */
if
(
!
len
)
{
int
*
t_ctype0
=
t_ctype
[
p
[
0
]];
*
pRight1
=
t_ctype0
[
0
];
if
(
*
pRight1
!=
IGNORE
)
pRight1
++
;
*
pRight2
=
t_ctype0
[
1
];
if
(
*
pRight2
!=
IGNORE
)
pRight2
++
;
*
pRight3
=
t_ctype0
[
2
];
if
(
*
pRight3
!=
IGNORE
)
pRight3
++
;
}
*
pRight1
++=
L2_BLANK
;
*
pRight2
++=
L3_BLANK
;
*
pRight3
++=
'\0'
;
memcpy
(
pRight1
,
pLeft2
,
pRight2
-
pLeft2
);
pRight1
+=
pRight2
-
pLeft2
;
pRight1
+=
pRight2
-
pLeft2
;
memcpy
(
pRight1
,
pLeft3
,
pRight3
-
pLeft3
);
/* pRight1 += pRight3 - pLeft3; */
/* memcpy(pRight1, pLeft4, pRight4 - pLeft4); */
free
(
pLeft2
);
free
(
pLeft3
);
/* free(pLeft4); */
return
(
outBuf
);
return
outBuf
;
}
/* strncoll() replacement, compare 2 string, both are conveted to sortable string
...
...
@@ -539,12 +535,12 @@ int my_strnncoll_tis620(const uchar * s1, int len1, const uchar * s2, int len2)
{
uchar
*
tc1
,
*
tc2
;
int
i
;
tc1
=
thai2sortable
(
s1
,
len1
);
tc2
=
thai2sortable
(
s2
,
len2
);
i
=
strcmp
((
char
*
)
tc1
,
(
char
*
)
tc2
);
tc1
=
thai2sortable
(
s1
,
len1
);
tc2
=
thai2sortable
(
s2
,
len2
);
i
=
strcmp
((
char
*
)
tc1
,
(
char
*
)
tc2
);
free
(
tc1
);
free
(
tc2
);
return
(
i
)
;
return
i
;
}
/* strnxfrm replacment, convert Thai string to sortable string
...
...
@@ -555,12 +551,12 @@ int my_strnxfrm_tis620(uchar * dest, const uchar * src, int len, int srclen)
{
uint
bufSize
;
uchar
*
tmp
;
bufSize
=
(
uint
)
buffsize
((
char
*
)
src
);
tmp
=
thai2sortable
(
src
,
srclen
);
bufSize
=
(
uint
)
buffsize
((
char
*
)
src
);
tmp
=
thai2sortable
(
src
,
srclen
);
set_if_smaller
(
bufSize
,(
uint
)
len
);
memcpy
((
uchar
*
)
dest
,
tmp
,
bufSize
);
free
(
tmp
);
return
(
int
)
bufSize
;
return
(
int
)
bufSize
;
}
/* strcoll replacment, compare 2 strings
...
...
@@ -571,12 +567,12 @@ int my_strcoll_tis620(const uchar * s1, const uchar * s2)
{
uchar
*
tc1
,
*
tc2
;
int
i
;
tc1
=
thai2sortable
(
s1
,
(
uint
)
strlen
((
char
*
)
s1
));
tc2
=
thai2sortable
(
s2
,
(
uint
)
strlen
((
char
*
)
s2
));
i
=
strcmp
((
char
*
)
tc1
,
(
char
*
)
tc2
);
tc1
=
thai2sortable
(
s1
,
(
uint
)
strlen
((
char
*
)
s1
));
tc2
=
thai2sortable
(
s2
,
(
uint
)
strlen
((
char
*
)
s2
));
i
=
strcmp
((
char
*
)
tc1
,
(
char
*
)
tc2
);
free
(
tc1
);
free
(
tc2
);
return
(
i
)
;
return
i
;
}
/* strxfrm replacment, convert Thai string to sortable string
...
...
@@ -588,9 +584,9 @@ int my_strxfrm_tis620(uchar * dest, const uchar * src, int len)
uint
bufSize
;
uchar
*
tmp
;
bufSize
=
(
uint
)
buffsize
((
char
*
)
src
);
tmp
=
thai2sortable
(
src
,
len
);
memcpy
((
uchar
*
)
dest
,
tmp
,
bufSize
);
bufSize
=
(
uint
)
buffsize
((
char
*
)
src
);
tmp
=
thai2sortable
(
src
,
len
);
memcpy
((
uchar
*
)
dest
,
tmp
,
bufSize
);
free
(
tmp
);
return
bufSize
;
}
...
...
@@ -620,7 +616,7 @@ my_bool my_like_range_tis620(const char *ptr, uint ptr_length, pchar escape,
if
(
*
ptr
==
escape
&&
ptr
+
1
!=
end
)
{
ptr
++
;
/* Skipp escape */
*
min_str
++=
*
max_str
++
=
*
ptr
;
*
min_str
++
=
*
max_str
++
=
*
ptr
;
continue
;
}
if
(
*
ptr
==
wild_one
)
/* '_' in SQL */
...
...
@@ -654,26 +650,22 @@ my_bool my_like_range_tis620(const char *ptr, uint ptr_length, pchar escape,
*/
void
ThNormalize
(
uchar
*
ptr
,
uint
field_length
,
const
uchar
*
from
,
uint
length
)
{
const
uchar
*
fr
=
from
;
uchar
*
p
=
ptr
;
const
uchar
*
fr
=
from
;
uchar
*
p
=
ptr
;
if
(
length
>
field_length
)
length
=
field_length
;
if
(
length
>
field_length
)
{
length
=
field_length
;
}
while
(
length
--
)
{
if
((
istone
(
*
fr
)
||
isdiacrt1
(
*
fr
))
&&
if
((
istone
(
*
fr
)
||
isdiacrt1
(
*
fr
))
&&
(
islwrvowel
(
fr
[
1
])
||
isuprvowel
(
fr
[
1
])))
{
*
p
=
fr
[
1
];
p
[
1
]
=
*
fr
;
fr
+=
2
;
p
+=
2
;
*
p
=
fr
[
1
];
p
[
1
]
=
*
fr
;
fr
+=
2
;
p
+=
2
;
length
--
;
}
else
{
*
p
++
=
*
fr
++
;
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment