Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
bugzilla
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
etersoft
bugzilla
Commits
0c1b77e1
Commit
0c1b77e1
authored
Mar 05, 2005
by
mkanat%kerio.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 284598: INSTR function is not supported by postgres
Patch By Tomas Kopal <Tomas.Kopal@altap.cz> r=mkanat, a=justdave
parent
8b471846
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
58 additions
and
31 deletions
+58
-31
DB.pm
Bugzilla/DB.pm
+16
-0
Mysql.pm
Bugzilla/DB/Mysql.pm
+14
-0
Search.pm
Bugzilla/Search.pm
+9
-14
User.pm
Bugzilla/User.pm
+15
-13
checksetup.pl
checksetup.pl
+4
-4
No files found.
Bugzilla/DB.pm
View file @
0c1b77e1
...
...
@@ -201,6 +201,12 @@ sub import {
$
Exporter::
ExportLevel
--
if
$is_exporter
;
}
sub
sql_position
{
my
(
$self
,
$fragment
,
$text
)
=
@_
;
return
"POSITION($fragment IN $text)"
;
}
# XXX - Needs to be documented.
sub
bz_server_version
{
my
(
$self
)
=
@_
;
...
...
@@ -674,6 +680,16 @@ formatted SQL command have prefix C<sql_>. All other methods have prefix C<bz_>.
(scalar)
Returns: formatted SQL for interval function (scalar)
=item C<sql_position>
Description: Outputs proper SQL syntax determinig position of a substring
(fragment) withing a string (text). Note: if the substring or
text are string constants, they must be properly quoted
(e.g. "'pattern'").
Params: $fragment = the string fragment we are searching for (scalar)
$text = the text to search (scalar)
Returns: formatted SQL for substring search (scalar)
=item C<bz_lock_tables>
Description: Performs a table lock operation on specified tables.
...
...
Bugzilla/DB/Mysql.pm
View file @
0c1b77e1
...
...
@@ -117,6 +117,20 @@ sub sql_interval {
return
"INTERVAL $interval"
;
}
sub
sql_position
{
my
(
$self
,
$fragment
,
$text
)
=
@_
;
# mysql 4.0.1 and lower do not support CAST
# mysql 3.*.* had a case-sensitive INSTR
# (checksetup has a check for unsupported versions)
my
$server_version
=
$self
->
bz_server_version
;
if
(
$server_version
=~
/^3\./
)
{
return
"INSTR($text, $fragment)"
;
}
else
{
return
"INSTR(CAST($text AS BINARY), CAST($fragment AS BINARY))"
;
}
}
sub
bz_lock_tables
{
my
(
$self
,
@tables
)
=
@_
;
...
...
Bugzilla/Search.pm
View file @
0c1b77e1
...
...
@@ -951,24 +951,16 @@ sub init {
$term
=
"$ff != $q"
;
},
",casesubstring"
=>
sub
{
# mysql 4.0.1 and lower do not support CAST
# mysql 3.*.* had a case-sensitive INSTR
# (checksetup has a check for unsupported versions)
my
$server_version
=
$dbh
->
bz_server_version
;
if
(
$dbh
->
isa
(
'Bugzilla::DB::Mysql'
)
&&
$server_version
=~
/^3\./
)
{
$term
=
"INSTR($ff ,$q)"
;
}
else
{
$term
=
"INSTR(CAST($ff AS BINARY), CAST($q AS BINARY))"
;
}
$term
=
$dbh
->
sql_position
(
$q
,
$ff
);
},
",substring"
=>
sub
{
$term
=
"INSTR(LOWER($ff), "
.
lc
(
$q
)
.
")"
;
$term
=
$dbh
->
sql_position
(
lc
(
$q
),
"LOWER($ff)"
)
;
},
",substr"
=>
sub
{
$funcsbykey
{
",substring"
}
->
();
},
",notsubstring"
=>
sub
{
$term
=
"INSTR(LOWER($ff), "
.
lc
(
$q
)
.
")
= 0"
;
$term
=
$dbh
->
sql_position
(
lc
(
$q
),
"LOWER($ff)"
)
.
"
= 0"
;
},
",regexp"
=>
sub
{
$term
=
"LOWER($ff) "
.
$dbh
->
sql_regexp
()
.
" $q"
;
...
...
@@ -1426,8 +1418,9 @@ sub ListIDsForEmail {
}
$list
=
join
(
','
,
@list
);
}
elsif
(
$type
eq
'substring'
)
{
&::
SendSQL
(
"SELECT userid FROM profiles WHERE INSTR(login_name, "
.
&::
SqlQuote
(
$email
)
.
") "
.
$dbh
->
sql_limit
(
51
));
&::
SendSQL
(
"SELECT userid FROM profiles WHERE "
.
$dbh
->
sql_position
(
lc
(
::
SqlQuote
(
$email
)),
"LOWER(login_name)"
)
.
" "
.
$dbh
->
sql_limit
(
51
));
while
(
&::
MoreSQLData
())
{
my
(
$id
)
=
&::
FetchSQLData
();
push
(
@list
,
$id
);
...
...
@@ -1478,10 +1471,12 @@ sub GetByWordList {
sub
GetByWordListSubstr
{
my
(
$field
,
$strs
)
=
(
@_
);
my
@list
;
my
$dbh
=
Bugzilla
->
dbh
;
foreach
my
$word
(
split
(
/[\s,]+/
,
$strs
))
{
if
(
$word
ne
""
)
{
push
(
@list
,
"INSTR(LOWER($field), "
.
lc
(
&::
SqlQuote
(
$word
))
.
")"
);
push
(
@list
,
$dbh
->
sql_position
(
lc
(
::
SqlQuote
(
$word
)),
"LOWER($field)"
));
}
}
...
...
Bugzilla/User.pm
View file @
0c1b77e1
...
...
@@ -618,23 +618,25 @@ sub match {
my
$sqlstr
=
&::
SqlQuote
(
uc
(
$str
));
my
$query
=
"SELECT DISTINCT userid, realname, login_name "
.
"FROM profiles
"
;
my
$query
=
"SELECT DISTINCT userid, realname, login_name "
.
"FROM profiles
"
;
if
(
&::
Param
(
'usevisibilitygroups'
))
{
$query
.=
", user_group_map
"
;
$query
.=
", user_group_map"
;
}
$query
.=
"WHERE (INSTR(UPPER(login_name), $sqlstr) "
.
"OR INSTR(UPPER(realname), $sqlstr)) "
;
$query
.=
" WHERE "
.
$dbh
->
sql_position
(
$sqlstr
,
"UPPER(login_name)"
)
.
" OR "
.
$dbh
->
sql_position
(
$sqlstr
,
"UPPER(realname)"
);
if
(
&::
Param
(
'usevisibilitygroups'
))
{
$query
.=
"
AND user_group_map.user_id = userid
"
.
"
AND isbless = 0
"
.
"AND group_id IN("
.
join
(
', '
,
(
-
1
,
@
{
$user
->
visible_groups_inherited
}))
.
")
"
.
"AND grant_type <> "
.
GRANT_DERIVED
;
$query
.=
"
AND user_group_map.user_id = userid
"
.
"
AND isbless = 0
"
.
"
AND group_id IN("
.
join
(
', '
,
(
-
1
,
@
{
$user
->
visible_groups_inherited
}))
.
")
"
.
"
AND grant_type <> "
.
GRANT_DERIVED
;
}
$query
.=
" AND disabledtext = ''
"
if
$exclude_disabled
;
$query
.=
"ORDER BY length(login_name)
"
;
$query
.=
$dbh
->
sql_limit
(
$limit
)
if
$limit
;
$query
.=
" AND disabledtext = ''
"
if
$exclude_disabled
;
$query
.=
" ORDER BY length(login_name)
"
;
$query
.=
" "
.
$dbh
->
sql_limit
(
$limit
)
if
$limit
;
&::
PushGlobalSQLState
();
&::
SendSQL
(
$query
);
push
(
@users
,
new
Bugzilla::
User
(
&::
FetchSQLData
()))
while
&::
MoreSQLData
();
...
...
checksetup.pl
View file @
0c1b77e1
...
...
@@ -4175,8 +4175,8 @@ if (!$dbh->bz_get_field_def('longdescs', 'already_wrapped')) {
# at display-time.
print
"Fixing old, mis-wrapped comments...\n"
;
$dbh
->
do
(
q{UPDATE longdescs SET already_wrapped = 0
WHERE (
POSITION('\n' IN thetext )
> 80
OR POSITION('\n' IN thetext ) = 0
)
WHERE (
}
.
$dbh
->
sql_position
(
q{'\n'}
,
'thetext'
)
.
q{
> 80
OR }
.
$dbh
->
sql_position
(
q{'\n'}
,
'thetext'
)
.
q{ = 0
)
AND SUBSTRING(thetext FROM 1 FOR 80) LIKE '% %'}
);
}
...
...
@@ -4547,8 +4547,8 @@ if (!defined $dbh->bz_get_index_def('longdescs', 'thetext')) {
print
"Removing paths from filenames in attachments table...\n"
;
$sth
=
$dbh
->
prepare
(
"SELECT attach_id, filename FROM attachments "
.
"WHERE
INSTR(filename, '/') "
.
"
OR INSTR(filename, '\\\\')"
);
"WHERE
"
.
$dbh
->
sql_position
(
q{'/'}
,
'filename'
)
.
"
OR "
.
$dbh
->
sql_position
(
q{'\\\\'}
,
'filename'
)
);
$sth
->
execute
;
while
(
my
(
$attach_id
,
$filename
)
=
$sth
->
fetchrow_array
)
{
...
...
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