mvhub-dev team mailing list archive
-
mvhub-dev team
-
Mailing list archive
-
Message #00132
[Branch ~mvhub-commit/mvhub/trunk] Rev 373: Merged after moving queries from Guidesearch.pm to sql_select.lib
Merge authors:
Priya Ravindran (priya)
Related merge proposals:
https://code.launchpad.net/~priya/mvhub/move_sql_lib_guidesearch/+merge/24222
proposed by: Priya Ravindran (priya)
review: Approve - Dan MacNeil (omacneil)
------------------------------------------------------------
revno: 373 [merge]
committer: Priya Ravindran <pthirumal@xxxxxxxxxx>
branch nick: trunk
timestamp: Thu 2010-04-29 13:20:48 -0400
message:
Merged after moving queries from Guidesearch.pm to sql_select.lib
modified:
app-mvhub/conf/sql_select.lib
app-mvhub/t/sql_lib_sanity.t
lib-mvhub/lib/MVHub/GuideSearch.pm
--
lp:mvhub
https://code.launchpad.net/~mvhub-commit/mvhub/trunk
Your team MVHub Developers is subscribed to branch lp:mvhub.
To unsubscribe from this branch go to https://code.launchpad.net/~mvhub-commit/mvhub/trunk/+edit-subscription
=== modified file 'app-mvhub/conf/sql_select.lib'
--- app-mvhub/conf/sql_select.lib 2010-04-15 17:42:46 +0000
+++ app-mvhub/conf/sql_select.lib 2010-04-29 14:58:08 +0000
@@ -40,6 +40,20 @@
AND
a.agency_id = p.agency_id
+[AGENCY_SEARCH_LOG_X_IF_RECORDED_RECENT_AGENCY_SEARCH_BY_USER]
+SELECT
+EXISTS
+ (
+ SELECT
+ 1
+ FROM
+ agency_search_log
+ WHERE
+ session_id = ?
+ AND
+ search_phrase = ?
+ )
+
[AGENCY_X_AGENCY_NAME_PASSWORD]
SELECT agency_name, password
FROM
@@ -105,7 +119,22 @@
last_updated < ?
AND
reminders_sent < ?
-
+
+[AGENCY_X_SEARCH_WITH_TERMS]
+SELECT
+ agency_id, agency_name, agency_alias, address1, address2,
+ city, state, zip, main_phone, email
+FROM
+ agency
+WHERE
+ agency_name ~* ?
+OR
+ agency_alias ~* ?
+AND
+ hidden=false
+ORDER BY
+ agency_name
+
[AGENCY_X_WEBSITE]
SELECT
website
@@ -114,6 +143,17 @@
WHERE
agency_id = ?
+[ALL_NAMES_VIEW_CATS_WITH_VISIBLE_PROGRAMS_VIEW_X_ALL_FOR_SYNONYMS]
+SELECT
+ a.category_id, a.category_name, a.stems_name, c.program_count
+FROM
+ all_names_view a
+JOIN
+ cats_with_visible_programs_view c
+USING (category_id)
+WHERE
+ stems_name ~* ?
+
[CATEGORY_PROGRAM_VIEW_HEADING_CATEGORY_X_ID_NAME_COUNT]
SELECT
c.category_id, c.category_name, c.program_count
@@ -125,7 +165,21 @@
hc.heading_name = ?
ORDER BY
c.category_name
-
+
+[CATEGORY_SEARCH_LOG_X_IF_RECORDED_RECENT_CATEGORY_SEARCH_BY_USER]
+SELECT
+EXISTS
+ (
+ SELECT
+ 1
+ FROM
+ category_search_log
+ WHERE
+ session_id = ?
+ AND
+ phrase_stems = ?
+ )
+
[CATEGORY_X_CATEGORY_NAME]
SELECT
category_name
@@ -194,4 +248,20 @@
program
WHERE
program_id = ?
-
+
+[SYNONYM_STEM_X_WORD_STEM]
+SELECT DISTINCT
+ word_stem
+FROM
+ synonym_stem
+WHERE
+ synonym_id
+IN
+ (SELECT
+ synonym_id
+ FROM
+ synonym_stem
+ WHERE
+ word_stem
+ IN (?)
+ )
=== modified file 'app-mvhub/t/sql_lib_sanity.t'
--- app-mvhub/t/sql_lib_sanity.t 2010-04-15 17:42:46 +0000
+++ app-mvhub/t/sql_lib_sanity.t 2010-04-27 13:50:58 +0000
@@ -37,23 +37,36 @@
sub get_test_placeholders {
my %data = (
+ 'AGENCY_SEARCH_LOG_X_IF_RECORDED_RECENT_AGENCY_SEARCH_BY_USER' =>
+ [ '66.92.77.160.5111109', 'nscap' ],
'AGENCY_X_AGENCY_NAME_PASSWORD' =>
[ 'chester@xxxxxxxxxxxxxx', 'chester@xxxxxxxxxxxxxx' ],
- 'AGENCY_X_AUTH_AGENCY' => [ '103553', '@lunch4all' ],
- 'AGENCY_X_EXPIRED_RECORDS' => [ '01-01-2008', 0 ],
- 'AGENCY_X_WEBSITE' => [103553],
+ 'AGENCY_X_AUTH_AGENCY' => [ '103553', '@lunch4all' ],
+ 'AGENCY_X_EXPIRED_RECORDS' => [ '01-01-2008', 0 ],
+ 'AGENCY_X_SEARCH_WITH_TERMS' => [
+ '[[:<:]](ymca|counsel|immi|shelter)[[:>:]]',
+ '[[:<:]](ymca|counsel|immi|shelter)[[:>:]]'
+ ],
+ 'AGENCY_X_WEBSITE' => [103553],
'AGENCY_PROGRAM_X_AGENCY_NAME_AGENCY_ALIAS' => [510296],
+ 'ALL_NAMES_VIEW_CATS_WITH_VISIBLE_PROGRAMS_VIEW_X_ALL_FOR_SYNONYMS' =>
+ ['[[:<:]](ymca|counsel|immi|shelter)[[:>:]]'],
'CATEGORY_PROGRAM_VIEW_HEADING_CATEGORY_X_ID_NAME_COUNT' =>
['Arts/Culture/Entertainment'],
+ 'CATEGORY_SEARCH_LOG_X_IF_RECORDED_RECENT_CATEGORY_SEARCH_BY_USER' =>
+ [ '66.92.77.160.5111109', 'test' ],
'CATEGORY_X_CATEGORY_NAME' => [800363],
'PROGRAM_AGENCY_PROGRAM_CATEGORY_X_AGENCY_NAME_ID_PROGRAM_NAME' =>
[800363],
'PROGRAM_X_EXPIRED_RECORDS' => [ '01-01-2008', 0 ],
'PROGRAM_X_WEBSITE' => [509548],
'PROGRAM_X_LAST_UPDATED' => [509548],
+ 'SYNONYM_STEM_X_WORD_STEM' => ['alcohol'],
+
);
return \%data;
}
+my $search_terms_aref = [ 'ymca', 'counsel', 'immi', 'shelter' ];
sub statements_in_alphabetical_order_in {
my ($sql_lib_file) = @_;
=== modified file 'lib-mvhub/lib/MVHub/GuideSearch.pm'
--- lib-mvhub/lib/MVHub/GuideSearch.pm 2009-12-07 20:00:37 +0000
+++ lib-mvhub/lib/MVHub/GuideSearch.pm 2010-04-27 13:50:58 +0000
@@ -9,6 +9,7 @@
use DBI;
use MVHub::Utils qw(assert);
+use MVHub::Utils::DB qw/get_sql_select_statement/;
use MVHub::Common;
sub agency_search {
@@ -40,25 +41,12 @@
my $search_terms_aref = shift;
# Search like agency_name and agency_alias
- my $sql
- = "SELECT agency_id, agency_name, agency_alias, address1, address2, "
- . "city, state, zip, main_phone, email "
- . "FROM agency "
- . "WHERE ";
-
- my @list;
- foreach my $search_term (@$search_terms_aref) {
- push @list,
- "( agency_name ~* '[[:<:]]$search_term'" . " OR "
- . "agency_alias ~* '[[:<:]]$search_term' )" . " AND "
- . "hidden = false";
- }
-
- $sql .= join( " OR ", @list );
-
- $sql .= " ORDER BY agency_name";
-
- my $matches_aref = $dbh->selectall_arrayref( $sql, { Slice => {} } );
+ my $regex1 = '[[:<:]](' . join( '|', @$search_terms_aref ) . ')[[:>:]]';
+ my $regex2 = '[[:<:]](' . join( '|', @$search_terms_aref ) . ')[[:>:]]';
+ my $sql = MVHub::Utils::DB::get_sql_select_statement(
+ 'AGENCY_X_SEARCH_WITH_TERMS');
+ my $matches_aref
+ = $dbh->selectall_arrayref( $sql, { Slice => {} }, $regex1, $regex2 );
return $matches_aref;
}
@@ -159,10 +147,8 @@
# 'WHERE session_id = ? AND phrase_stems = ?';
# ...but probably not as fast as the following, which will stop as soon
# it finds one matching row:
- my $sql
- = 'SELECT EXISTS ('
- . ' SELECT 1 FROM category_search_log '
- . ' WHERE session_id = ? AND phrase_stems = ?)';
+ my $sql = MVHub::Utils::DB::get_sql_select_statement(
+ 'CATEGORY_SEARCH_LOG_X_IF_RECORDED_RECENT_CATEGORY_SEARCH_BY_USER');
my $rows_aref = $dbh->selectcol_arrayref( $sql, undef, $user_session_id,
$phrase_stems_string );
@@ -208,17 +194,15 @@
my $match_count = @$matching_agencies_aref;
- # Find out if we've recently recorded this search for this user.
+ # Find out if we've recently recorded this agency search for this user.
# FYI: The following SQL is relatively straightforward...
- # my $sql = 'SELECT count(*) FROM category_search_log ' .
+ # my $sql = 'SELECT count(*) FROM agency_search_log ' .
# 'WHERE session_id = ? AND phrase_stems = ?';
# ...but probably not as fast as the following, which will stop as soon
# it finds one matching row:
- my $sql
- = 'SELECT EXISTS ('
- . ' SELECT 1 FROM agency_search_log '
- . ' WHERE session_id = ? AND search_phrase = ?)';
+ my $sql = MVHub::Utils::DB::get_sql_select_statement(
+ 'AGENCY_SEARCH_LOG_X_IF_RECORDED_RECENT_AGENCY_SEARCH_BY_USER');
my $rows_aref
= $dbh->selectcol_arrayref( $sql, undef, $user_session_id, $phrase );
return if ( $rows_aref->[0] );
@@ -269,11 +253,10 @@
foreach (@$phrase_words_aref) { $word_list .= $dbh->quote($_) . ',' }
chop $word_list;
- my $sql
- = "SELECT DISTINCT word_stem FROM synonym_stem where synonym_id in "
- . "(SELECT synonym_id FROM synonym_stem WHERE word_stem IN ($word_list))";
+ my $sql = MVHub::Utils::DB::get_sql_select_statement(
+ 'SYNONYM_STEM_X_WORD_STEM');
- my @synonyms = @{ $dbh->selectcol_arrayref($sql) };
+ my @synonyms = @{ $dbh->selectcol_arrayref( $sql, undef, $word_list ) };
@$phrase_words_aref
= Set::Array->new( @synonyms, @$phrase_words_aref )->unique();
@@ -301,15 +284,11 @@
# "WHERE stems_name ~* '$regex'";
# TODO: option of LEFT JOIN vs JOIN
- my $sql
- = "SELECT a.category_id, a.category_name, a.stems_name, c.program_count "
- . "FROM "
- . "all_names_view a "
- . "JOIN cats_with_visible_programs_view c "
- . "USING (category_id) "
- . "WHERE stems_name ~* '$regex'";
+ my $sql = MVHub::Utils::DB::get_sql_select_statement(
+ 'ALL_NAMES_VIEW_CATS_WITH_VISIBLE_PROGRAMS_VIEW_X_ALL_FOR_SYNONYMS');
- my $matches_aref = $dbh->selectall_arrayref( $sql, { Slice => {} } );
+ my $matches_aref
+ = $dbh->selectall_arrayref( $sql, { Slice => {} }, $regex );
order_matches( $matches_aref, $search_terms_aref );