← Back to team overview

mvhub-dev team mailing list archive

[Merge] lp:~saroun-sek/mvhub/sql_change into lp:mvhub

 

Saroun Sek has proposed merging lp:~saroun-sek/mvhub/sql_change into lp:mvhub.

Requested reviews:
  MVHub devs with commit rights (mvhub-commit)


Moving SQL code from perl onto SQL lib file.
-- 
https://code.launchpad.net/~saroun-sek/mvhub/sql_change/+merge/27870
Your team MVHub Developers is subscribed to branch lp:mvhub.
=== modified file 'app-mvhub/DocumentRoot/cgi-bin/mvhub/admin/structure.pl'
--- app-mvhub/DocumentRoot/cgi-bin/mvhub/admin/structure.pl	2009-12-18 18:09:42 +0000
+++ app-mvhub/DocumentRoot/cgi-bin/mvhub/admin/structure.pl	2010-06-17 18:49:27 +0000
@@ -270,7 +270,8 @@
 # [ "Arts/Culture/Entertainment", "Financial Education/Credit", ... ]
 sub get_all_headings {
     my $dbh = MVHub::Utils::DB::get_dbh();
-    my $sql = 'SELECT heading_name FROM heading ORDER BY heading_name';
+    my $sql = MVHub::Utils::DB::get_sql_select_statement(
+        'HEADING_X_HEADING_NAME');
     my $headings_aref = $dbh->selectcol_arrayref($sql);
     return $headings_aref;
 }
@@ -284,10 +285,9 @@
 sub get_all_programs {
     my $dbh = MVHub::Utils::DB::get_dbh();
 
-    my $sql = "SELECT program_id, 
-         get_agency_name(agency_id) || ': ' || program_name
-             AS agency_program_name 
-         FROM program ORDER BY agency_program_name";
+    my $sql = MVHub::Utils::DB::get_sql_select_statement(
+        'PROGRAM_X_PROGRAM_AGENCY_ID');
+
     my $result_aref = $dbh->selectall_arrayref($sql);
 
     # see end of 'perldoc -f map' on why the '+' in the following:
@@ -306,23 +306,23 @@
     );
     my $category_name = $category_href->{category_name};
 
+    my $sql
+        = MVHub::Utils::DB::get_sql_select_statement('ALIAS_X_ALIAS_NAME');
     my $aliases_aref
-        = $dbh->selectcol_arrayref(
-        'SELECT alias_name FROM alias WHERE category_id = ?',
-        undef, $category_id );
+        = $dbh->selectcol_arrayref( $sql, { Slice => {} }, $category_id );
     my $aliases = join( "\n", @$aliases_aref );
 
+    $sql = MVHub::Utils::DB::get_sql_select_statement(
+        'HEADING_CATEGORY_X_HEADING_NAME');
     my $headings_aref
-        = $dbh->selectcol_arrayref(
-        'SELECT heading_name FROM heading_category WHERE category_id = ?',
-        undef, $category_id );
+        = $dbh->selectcol_arrayref( $sql, { Slice => {} }, $category_id );
     assert( @$headings_aref,
         "Expected at least one heading for this category (#$category_id)" );
 
+    $sql = MVHub::Utils::DB::get_sql_select_statement(
+        'PROGRAM_CATEGORY_X_PROGRAM_ID');
     my $programs_aref
-        = $dbh->selectcol_arrayref(
-        'SELECT program_id FROM program_category WHERE category_id = ?',
-        undef, $category_id );
+        = $dbh->selectcol_arrayref( $sql, { Slice => {} }, $category_id );
     return {
         category_name => $category_name,
         aliases       => $aliases,

=== modified file 'app-mvhub/DocumentRoot/cgi-bin/mvhub/agency_form.pl'
--- app-mvhub/DocumentRoot/cgi-bin/mvhub/agency_form.pl	2009-12-29 17:26:17 +0000
+++ app-mvhub/DocumentRoot/cgi-bin/mvhub/agency_form.pl	2010-06-17 18:49:27 +0000
@@ -249,7 +249,8 @@
 
 # Get "last updated" date from production agency table so we can insert it into
 # date_agency_created.
-    my $sql = "SELECT last_updated FROM agency WHERE agency_id = ?";
+    my $sql
+        = MVHub::Utils::DB::get_sql_select_statement('AGENCY_X_LAST_UPDATED');
     my $date_created = ( $dbh->selectrow_array( $sql, {}, $agency_id ) )[0];
 
 # Now that record's inserted into production table, add entry to date_agency_created table

=== modified file 'app-mvhub/DocumentRoot/cgi-bin/mvhub/program.pl'
--- app-mvhub/DocumentRoot/cgi-bin/mvhub/program.pl	2010-03-31 16:11:24 +0000
+++ app-mvhub/DocumentRoot/cgi-bin/mvhub/program.pl	2010-06-17 18:49:27 +0000
@@ -471,10 +471,8 @@
 
     my $dbh = MVHub::Utils::DB::get_dbh( $ENV{MV_CONFIG_FILE} );
 
-    my $stmt
-        = "SELECT h.heading_name, c.category_id, c.category_name "
-        . "FROM category c, heading_category h "
-        . "WHERE h.category_id = c.category_id";
+    my $stmt = MVHub::Utils::DB::get_sql_select_statement(
+        'CATEGORY_HEADING_CATEGORY_X_HEADING_CATEGORY_NAME');
 
     my $categories_aref = $dbh->selectall_arrayref( $stmt, { Slice => {} } );
 
@@ -1164,8 +1162,7 @@
 # the town table.
 sub get_selectable_towns_from_db {
     my $dbh = MVHub::Utils::DB::get_dbh( $ENV{MV_CONFIG_FILE} );
-    my $sql = "SELECT town_state FROM town WHERE display = TRUE "
-        . "ORDER BY town_state";
+    my $sql = MVHub::Utils::DB::get_sql_select_statement('TOWN_X_TOWN_STATE');
     my $towns_aref = $dbh->selectcol_arrayref($sql);
     MVHub::Utils::assert( @$towns_aref > 0, "Expected at least one town." );
     return $towns_aref;

=== modified file 'app-mvhub/bin/generate_agency_program_pdf.pl'
--- app-mvhub/bin/generate_agency_program_pdf.pl	2010-02-08 22:13:12 +0000
+++ app-mvhub/bin/generate_agency_program_pdf.pl	2010-06-17 18:49:27 +0000
@@ -74,11 +74,9 @@
 
     my $dbh = MVHub::Utils::DB::get_dbh($config_file);
 
-    my $sql = <<'SQL';
-    SELECT heading_name
-     FROM heading
-     ORDER BY heading_name
-SQL
+    my $sql = MVHub::Utils::DB::get_sql_select_statement(
+        'HEADING_X_HEADING_NAME');
+
     my $headings_aref = $dbh->selectcol_arrayref($sql);
 
     # keys are entry ids
@@ -271,29 +269,9 @@
     my $heading = shift or croak 'missing Parameter:$heading';
     $heading = MVHub::GeneratePDF::unclean($heading);
 
-    my $sql = << 'SQL';
-      SELECT 
-             program.*, agency_name
-      FROM 
-            program JOIN agency USING ( agency_id )
-      WHERE 
-            agency_id IN (
-				SELECT a.agency_id 
-				FROM agency a, program p 
-				WHERE a.agency_id = p.agency_id
-				      AND p.hidden_reason IS NULL
-				GROUP BY a.agency_id 
-				HAVING sum(1) >1 
-            )
-            AND program_id IN (
-				SELECT program_id
-				FROM program_category
-				NATURAL JOIN heading_category
-				WHERE heading_name = ? 
-                            )
-        AND program.hidden_reason IS NULL
-        AND NOT agency.hidden
-SQL
+    my $sql = MVHub::Utils::DB::get_sql_select_statement(
+        'PROGRAM_AGENCY_X_PROGRAM_AGENCY_NAME');
+
     return $dbh->selectall_arrayref( $sql, { Slice => {} }, ($heading) );
 }
 
@@ -302,37 +280,8 @@
     my $heading = shift or croak 'missing Parameter:$heading';
     $heading = MVHub::GeneratePDF::unclean($heading);
 
-    my $sql = <<'SQL';
-  SELECT 
-        agency.*
-  FROM 
-        agency
-  WHERE 
-	 agency_id IN (
-                         SELECT 
-	                        agency_id 
-		         FROM agency 
-			 JOIN program
-                         USING ( agency_id ) 
-			 WHERE hidden_reason IS NULL
-			 GROUP BY agency_id 
-			 HAVING sum(1) >1 
-                       )
-         AND agency_id IN
-                        (
-			  SELECT agency_id
-			  FROM agency
-			  JOIN program
-			  USING ( agency_id )
-			  JOIN program_category
-			  USING ( program_id )
-			  JOIN heading_category
-			  USING ( category_id )
-			  WHERE hidden_reason IS NULL
-                          AND heading_name = ?	
-	                 )
-        AND NOT agency.hidden
-SQL
+    my $sql = MVHub::Utils::DB::get_sql_select_statement(
+        'AGENCY_HEADING_PROGRAM_X_AGENCY_ID');
 
     return $dbh->selectall_arrayref( $sql, { Slice => {} }, ($heading) );
 
@@ -343,34 +292,9 @@
     my $heading = shift or croak 'missing Parameter:$heading';
     $heading = MVHub::GeneratePDF::unclean($heading);
 
-    my $sql = << "SQL";
-  SELECT 
-        agency.*
-  FROM 
-       agency
-  WHERE agency_id IN (
-                       SELECT agency_id 
-    		       FROM agency 
-                       JOIN program
-                       USING ( agency_id ) 
-		       WHERE hidden_reason IS NULL
-                       GROUP BY agency_id 
-                       HAVING sum(1) = 1
-                      )
-  AND agency_id IN (
-                         SELECT agency_id
-	      		 FROM agency
-			 JOIN program
-			 USING ( agency_id )
-			 JOIN program_category
-			 USING ( program_id )
-			 JOIN heading_category
-			 USING ( category_id )
-			 WHERE hidden_reason IS NULL
-                         AND heading_name = ?	
-			)
-        AND NOT agency.hidden
-SQL
+    my $sql = MVHub::Utils::DB::get_sql_select_statement(
+        'AGENCY_HEADING_PROGRAM_X_AGENCY_ID_EQUAL');
+
     my $result_aref
         = $dbh->selectall_arrayref( $sql, { Slice => {} }, ($heading) );
     return $result_aref;
@@ -380,21 +304,9 @@
 sub get_agencies_without_programs {
     my $dbh = shift or croak 'missing Parameter:$dbh';
 
-    my $sql = <<'SQL';
-  SELECT agency.*
-  FROM agency
-  WHERE agency_id NOT IN (
-                            SELECT agency_id 
-                            FROM program 
-                           )
-  OR agency_id IN        (
-                           SELECT agency_id 
-                           FROM program
-                           WHERE hidden_reason IS NULL
-                           AND program_id NOT IN (SELECT program_id FROM program_category)
-                         )
-        AND NOT agency.hidden
-SQL
+    my $sql = MVHub::Utils::DB::get_sql_select_statement(
+        'AGENCY_PROGRAM_X_AGENCY_ID');
+
     return $dbh->selectall_arrayref( $sql, { Slice => {} } );
 
 }
@@ -407,9 +319,11 @@
     my $dbh = shift;
 
     # get leads from non-first words in categories to the category
-    my $sql        = "SELECT category_name FROM category";
+    my $sql = MVHub::Utils::DB::get_sql_select_statement(
+        'CATEGORY_X_IN_CATEGORY_NAME');
+
     my @categories = @{ $dbh->selectcol_arrayref( $sql, { Slice => {} } ) };
-    my $ret        = join '', map {
+    my $ret = join '', map {
         my $category = MVHub::GeneratePDF::clean($_);
         my @words = split( /\W/, $category );
         $category =~ s/,.*//;    # just point to the top level
@@ -420,8 +334,9 @@
 
     # get leads from aliases to categories
     # and get leads from non-first words in aliases to categories
-    $sql
-        = "SELECT alias_name, category_name FROM alias JOIN category USING (category_id)";
+    $sql = MVHub::Utils::DB::get_sql_select_statement(
+        'ALIAS_CATEGORY_X_ALIAS_NAME_CATEGORY');
+
     my $aref = $dbh->selectall_arrayref( $sql, { Slice => {} } );
     $ret .= join '', map {
         my $alias = MVHub::GeneratePDF::clean( $_->{'alias_name'} );
@@ -479,17 +394,13 @@
     my $r   = shift;
     my $dbh = shift;
     return () unless $r->{'program_id'};
-    my $sql = <<END_SQL
-		SELECT category_name
-		FROM category
-			JOIN program_category
-			USING ( category_id )
-		WHERE program_id = '$r->{'program_id'}'
-END_SQL
-        ;
+    my $sql = MVHub::Utils::DB::get_sql_select_statement(
+        'CATEGORY_PROGRAM_X_CATEGORY_NAME');
+    my @bind_variables = ( $r->{'program_id'} );
     return
         map { MVHub::GeneratePDF::clean($_) }
-        @{ $dbh->selectcol_arrayref( $sql, { Slice => {} } ) };
+        @{ $dbh->selectcol_arrayref( $sql, { Slice => {} }, @bind_variables )
+        };
 }
 
 sub index_subheading {
@@ -568,13 +479,8 @@
     return if $r_href->{'program_id'};
     my $agency_id = $r_href->{'agency_id'};
 
-    my $sql = <<END_SQL;
-		SELECT *
-		FROM agency
-			JOIN program
-			USING ( agency_id )
-		WHERE agency_id =  ?
-END_SQL
+    my $sql
+        = MVHub::Utils::DB::get_sql_select_statement('AGENCY_PROGRAM_X_ALL');
 
     my $aref
         = $dbh->selectall_arrayref( $sql, { Slice => {} }, ($agency_id) );
@@ -596,11 +502,8 @@
 
     my $dbh = shift;
 
-    my $sql = <<END_SQL
-                SELECT *
-                FROM agency
-END_SQL
-        ;
+    my $sql = MVHub::Utils::DB::get_sql_select_statement('AGENCY_X_ALL');
+
     my $aref = $dbh->selectall_arrayref( $sql, { Slice => {} } );
 
     $aref = clean_merge_sort( $aref, [] );

=== modified file 'app-mvhub/bin/mv_dump.pl'
--- app-mvhub/bin/mv_dump.pl	2009-12-18 18:09:42 +0000
+++ app-mvhub/bin/mv_dump.pl	2010-06-17 18:49:27 +0000
@@ -23,7 +23,8 @@
     my @columns = get_column_list();
     my $columns = join ',', @columns;
 
-    my $sql             = "SELECT $columns FROM AGENCY WHERE NOT hidden";
+    my $sql = MVHub::Utils::DB::get_sql_select_statement('AGENCY_X_COLUMNS');
+
     my $agencies_rayref = $dbh->selectall_arrayref($sql);
 
     my $csv = Text::xSV->new(

=== modified file 'app-mvhub/bin/welcome_email.pl'
--- app-mvhub/bin/welcome_email.pl	2009-12-07 20:00:37 +0000
+++ app-mvhub/bin/welcome_email.pl	2010-06-17 18:49:27 +0000
@@ -38,7 +38,8 @@
     my $dbh = MVHub::Utils::DB::get_dbh();
 
     # Fetch all agencies.
-    my $sql = "SELECT * from agency";
+    my $sql = MVHub::Utils::DB::get_sql_select_statement('AGENCY_X_ALL');
+
     my $agencies_aref = $dbh->selectall_arrayref( $sql, { Slice => {} } );
 
     # For each agency:
@@ -60,8 +61,9 @@
 
   # GET THE DATA FOR THE AGENCY CONTACT EMAIL
   # Get the program names for this agency that ARE owned by the agency contact
-        my $sql
-            = "SELECT program_name FROM program WHERE agency_id = ? AND contact_first_name = ? AND contact_last_name = ? AND contact_email = ?";
+        my $sql = MVHub::Utils::DB::get_sql_select_statement(
+            'PROGRAM_X_PROGRAM_NAME');
+
         my @names_of_programs_owned_by_ac = @{
             $dbh->selectcol_arrayref(
                 $sql,           undef,         $agency_id,
@@ -70,8 +72,9 @@
             };
 
    # Get the programs for this agency that are NOT owned by the agency contact
-        $sql
-            = 'SELECT program_name, contact_first_name, contact_last_name, contact_email FROM program WHERE agency_id = ? AND NOT (contact_first_name = ? AND contact_last_name = ? AND contact_email = ?) ORDER BY contact_last_name, contact_first_name, program_name';
+        $sql = MVHub::Utils::DB::get_sql_select_statement(
+            'PROGRAM_X_PROGRAM_CONTACT_FIRST_LAST_NAME_EMAIL');
+
         my @programs_owned_by_pcs = @{
             $dbh->selectall_arrayref(
                 $sql, { Slice => {} }, $agency_id,
@@ -93,15 +96,17 @@
         next if !@programs_owned_by_pcs;
 
 # Get the program contacts (who are not also the agency contact) for our agency
-        $sql
-            = 'SELECT DISTINCT contact_first_name, contact_last_name, contact_email FROM program WHERE agency_id = ? AND NOT (contact_first_name = ? AND contact_last_name = ? AND contact_email = ?)';
+        $sql = MVHub::Utils::DB::get_sql_select_statement(
+            'PROGRAM_X_DISTINCT_PROGRAM_CONTACT_FIRST_LAST_NAME_EMAIL');
+
         my $pcs_aref = $dbh->selectall_arrayref( $sql, { Slice => {} },
             $agency_id, $ac_first_name, $ac_last_name, $ac_email );
 
         # Get the program name(s) owned by this program contact
         foreach my $pc_href (@$pcs_aref) {
-            $sql
-                = 'SELECT program_name FROM program WHERE agency_id = ? AND contact_first_name = ? AND contact_last_name = ? AND contact_email = ?';
+            $sql = MVHub::Utils::DB::get_sql_select_statement(
+                'PROGRAM_X_PROGRAM_NAME');
+
             my $program_names_aref = $dbh->selectall_arrayref(
                 $sql,
                 { Slice => {} },

=== modified file 'app-mvhub/conf/sql_select.lib'
--- app-mvhub/conf/sql_select.lib	2010-06-09 14:25:30 +0000
+++ app-mvhub/conf/sql_select.lib	2010-06-17 18:49:27 +0000
@@ -30,6 +30,80 @@
 #  example:
 #    $dbi->selectallsomething('PROGRAM_X_LAST_UPDATED]',($progam _id);
 
+[AGENCY_HEADING_PROGRAM_X_AGENCY_ID]
+SELECT 
+	agency.*
+FROM 
+	agency
+WHERE 
+    agency_id IN (
+		 SELECT 
+		      agency_id 
+		 FROM agency 
+		 JOIN program
+					 USING ( agency_id ) 
+		 WHERE hidden_reason IS NULL
+		 GROUP BY agency_id 
+		 HAVING sum(1) >1 
+				   )
+	 AND agency_id IN
+					(
+		  SELECT agency_id
+		  FROM agency
+		  JOIN program
+		  USING ( agency_id )
+		  JOIN program_category
+		  USING ( program_id )
+		  JOIN heading_category
+		  USING ( category_id )
+		  WHERE hidden_reason IS NULL
+					  AND heading_name = ?	
+				 )
+	AND NOT agency.hidden
+	
+[AGENCY_HEADING_PROGRAM_X_AGENCY_ID_EQUAL]
+  SELECT 
+        agency.*
+  FROM 
+       agency
+  WHERE agency_id IN (
+                       SELECT agency_id 
+    		       FROM agency 
+                       JOIN program
+                       USING ( agency_id ) 
+		       WHERE hidden_reason IS NULL
+                       GROUP BY agency_id 
+                       HAVING sum(1) = 1
+                      )
+  AND agency_id IN (
+                         SELECT agency_id
+	      		 FROM agency
+			 JOIN program
+			 USING ( agency_id )
+			 JOIN program_category
+			 USING ( program_id )
+			 JOIN heading_category
+			 USING ( category_id )
+			 WHERE hidden_reason IS NULL
+                         AND heading_name = ?	
+			)
+        AND NOT agency.hidden
+
+[AGENCY_PROGRAM_X_AGENCY_ID]
+  SELECT agency.*
+  FROM agency
+  WHERE agency_id NOT IN (
+                            SELECT agency_id 
+                            FROM program 
+                           )
+  OR agency_id IN        (
+                           SELECT agency_id 
+                           FROM program
+                           WHERE hidden_reason IS NULL
+                           AND program_id NOT IN (SELECT program_id FROM program_category)
+                         )
+        AND NOT agency.hidden
+		
 [AGENCY_PROGRAM_X_AGENCY_NAME_AGENCY_ALIAS]
 SELECT 
   a.agency_name, a.agency_alias, p.* 
@@ -40,6 +114,13 @@
 AND 
   a.agency_id = p.agency_id
 
+[AGENCY_PROGRAM_X_ALL]
+SELECT *
+FROM agency
+	JOIN program
+	USING ( agency_id )
+WHERE agency_id =  ?
+
 [AGENCY_SEARCH_LOG_X_IF_RECORDED_RECENT_AGENCY_SEARCH_BY_USER]
 SELECT 
 EXISTS 
@@ -71,7 +152,7 @@
 [AGENCY_X_ALL]
 SELECT 
          * 
-  FROM 
+FROM 
        agency
 
            
@@ -101,6 +182,22 @@
 AND 
   lower(password)=?
   
+[AGENCY_X_COLUMNS]
+SELECT 
+        agency_name, agency_alias, last_updated, agency_id, address1,
+		address2, city, state, zip,
+        main_phone, toll_free_phone, hotline, fax,
+		website, email, mission,hours, other_info,
+        mail_address1,          mail_address2,
+        mail_city,              mail_state,
+        mail_zip,               chief,
+        title,                  parent_organization,
+        resource_library,       resource_library_description,
+        meeting_space,          meeting_space_description,
+        staff_internet_access,  tty_tdd
+FROM agency 
+WHERE NOT hidden
+  
 [AGENCY_X_EXPIRED_RECORDS]
    SELECT 
       agency_id, 
@@ -120,6 +217,11 @@
    AND
       reminders_sent < ?
 
+[AGENCY_X_LAST_UPDATED]
+SELECT last_updated 
+FROM agency 
+WHERE agency_id = ?
+
 [AGENCY_X_SEARCH_WITH_TERMS]
 SELECT 
   agency_id, agency_name, agency_alias, address1, address2,
@@ -142,6 +244,16 @@
   agency 
 WHERE 
   agency_id = ?
+  
+[ALIAS_CATEGORY_X_ALIAS_NAME_CATEGORY]
+SELECT alias_name, category_name 
+FROM alias 
+JOIN category USING (category_id)
+
+[ALIAS_X_ALIAS_NAME]  
+SELECT alias_name 
+FROM alias 
+WHERE category_id = ?
 
 [ALL_NAMES_VIEW_CATS_WITH_VISIBLE_PROGRAMS_VIEW_X_ALL_FOR_SYNONYMS]  
 SELECT 
@@ -154,6 +266,7 @@
 WHERE 
   stems_name ~* ? 
 
+
 [CATEGORY_HEADING_CATEGORY_X_FETCH_HEADING_CATEGORY]
 SELECT
    h.heading_name, c.category_id, c.category_name 
@@ -163,6 +276,11 @@
   h.category_id = c.category_id 
 ORDER BY 
   h.heading_name, c.category_name
+  
+[CATEGORY_HEADING_CATEGORY_X_HEADING_CATEGORY_NAME]
+SELECT h.heading_name, c.category_id, c.category_name 
+FROM category c, heading_category h 
+WHERE h.category_id = c.category_id
 
 [CATEGORY_PROGRAM_VIEW_HEADING_CATEGORY_X_ID_NAME_COUNT]
 SELECT
@@ -175,6 +293,13 @@
   hc.heading_name = ?
 ORDER BY
   c.category_name
+
+[CATEGORY_PROGRAM_X_CATEGORY_NAME]
+SELECT category_name
+FROM category
+	JOIN program_category
+	USING ( category_id )
+WHERE program_id = ?
     
 [CATEGORY_SEARCH_LOG_X_IF_RECORDED_RECENT_CATEGORY_SEARCH_BY_USER]
 SELECT 
@@ -189,7 +314,7 @@
 	 AND 
 		phrase_stems = ?
 	)
-	 
+		
 [CATEGORY_X_CATEGORY_NAME]
 SELECT 
    category_name 
@@ -198,6 +323,23 @@
 WHERE 
    category_id = ?
 
+[CATEGORY_X_IN_CATEGORY_NAME]
+SELECT category_name 
+FROM category
+
+[HEADING_CATEGORY_X_HEADING_NAME]
+SELECT heading_name 
+FROM heading_category 
+WHERE category_id = ?
+
+[HEADING_X_HEADING_NAME]
+SELECT 
+	heading_name
+FROM 
+	heading
+ORDER BY 
+	heading_name
+
 [PROGRAM_AGENCY_PROGRAM_CATEGORY_X_AGENCY_NAME_ID_PROGRAM_NAME]
 SELECT 
     a.agency_name, p.program_id, p.program_name,
@@ -214,6 +356,29 @@
 ORDER BY
    p.program_name
 
+[PROGRAM_AGENCY_X_PROGRAM_AGENCY_NAME]
+SELECT 
+	program.*, agency_name
+FROM 
+	program JOIN agency USING ( agency_id )
+WHERE 
+	agency_id IN (
+		SELECT a.agency_id 
+		FROM agency a, program p 
+		WHERE a.agency_id = p.agency_id
+			  AND p.hidden_reason IS NULL
+		GROUP BY a.agency_id 
+		HAVING sum(1) >1 
+	)
+	AND program_id IN (
+		SELECT program_id
+		FROM program_category
+		NATURAL JOIN heading_category
+		WHERE heading_name = ? 
+					)
+AND program.hidden_reason IS NULL
+AND NOT agency.hidden
+
 [PROGRAM_CATEGORY_HEADING_CATEGORY_X_HEADING_NAME]
 SELECT DISTINCT
   hc.heading_name 
@@ -223,6 +388,18 @@
 WHERE 
  hc.category_id =pc.category_id
  
+[PROGRAM_CATEGORY_X_PROGRAM_ID]
+SELECT program_id 
+FROM program_category 
+WHERE category_id = ?
+ 
+[PROGRAM_X_DISTINCT_PROGRAM_CONTACT_FIRST_LAST_NAME_EMAIL]
+SELECT DISTINCT contact_first_name, contact_last_name, contact_email 
+FROM program 
+WHERE agency_id = ? 
+AND NOT (contact_first_name = ? AND contact_last_name = ? AND contact_email = ?)
+ 
+
 [PROGRAM_X_EXPIRED_RECORDS]
    SELECT 
       a.agency_id, 
@@ -250,6 +427,28 @@
   program 
 WHERE program_id = ?
 
+[PROGRAM_X_PROGRAM_AGENCY_ID]
+SELECT program_id, 
+       get_agency_name(agency_id) || ': ' || program_name
+AS agency_program_name 
+FROM program ORDER BY agency_program_name
+		 
+[PROGRAM_X_PROGRAM_CONTACT_FIRST_LAST_NAME_EMAIL]
+SELECT program_name, contact_first_name, contact_last_name, contact_email 
+FROM program 
+WHERE agency_id = ? 
+AND NOT (contact_first_name = ? 
+AND contact_last_name = ? 
+AND contact_email = ?) 
+ORDER BY contact_last_name, contact_first_name, program_name
+
+[PROGRAM_X_PROGRAM_NAME]
+SELECT program_name 
+FROM program 
+WHERE agency_id = ? 
+AND contact_first_name = ? 
+AND contact_last_name = ? 
+AND contact_email = ?
 
 [PROGRAM_X_WEBSITE]
 SELECT 
@@ -287,3 +486,8 @@
       word_stem 
     IN	(?)
    )
+
+[TOWN_X_TOWN_STATE]
+SELECT town_state 
+FROM town WHERE display = TRUE 
+ORDER BY town_state

=== modified file 'app-mvhub/t/sql_lib_sanity.t'
--- app-mvhub/t/sql_lib_sanity.t	2010-04-27 13:50:58 +0000
+++ app-mvhub/t/sql_lib_sanity.t	2010-06-17 18:49:27 +0000
@@ -37,6 +37,9 @@
 
 sub get_test_placeholders {
     my %data = (
+        'AGENCY_HEADING_PROGRAM_X_AGENCY_ID'       => ['103553'],
+        'AGENCY_HEADING_PROGRAM_X_AGENCY_ID_EQUAL' => ['103553'],
+        'AGENCY_PROGRAM_X_ALL'                     => ['103553'],
         'AGENCY_SEARCH_LOG_X_IF_RECORDED_RECENT_AGENCY_SEARCH_BY_USER' =>
             [ '66.92.77.160.5111109', 'nscap' ],
         'AGENCY_X_AGENCY_NAME_PASSWORD' =>
@@ -49,19 +52,30 @@
         ],
         'AGENCY_X_WEBSITE'                          => [103553],
         'AGENCY_PROGRAM_X_AGENCY_NAME_AGENCY_ALIAS' => [510296],
+        'AGENCY_X_LAST_UPDATED'                     => [103553],
+        'ALIAS_X_ALIAS_NAME'                        => [1],
         'ALL_NAMES_VIEW_CATS_WITH_VISIBLE_PROGRAMS_VIEW_X_ALL_FOR_SYNONYMS' =>
             ['[[:<:]](ymca|counsel|immi|shelter)[[:>:]]'],
+        'CATEGORY_PROGRAM_X_CATEGORY_NAME' => [103553],
         '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],
+        'CATEGORY_X_CATEGORY_NAME'        => [800363],
+        'HEADING_CATEGORY_X_HEADING_NAME' => [103553],
         'PROGRAM_AGENCY_PROGRAM_CATEGORY_X_AGENCY_NAME_ID_PROGRAM_NAME' =>
             [800363],
+        'PROGRAM_AGENCY_X_PROGRAM_AGENCY_NAME' => ['103553'],
+        'PROGRAM_CATEGORY_X_PROGRAM_ID'        => ['103553'],
+        'PROGRAM_X_DISTINCT_PROGRAM_CONTACT_FIRST_LAST_NAME_EMAIL' =>
+            [ '103553', 'fname', 'lname', 'a@xxxxx' ],
         'PROGRAM_X_EXPIRED_RECORDS' => [ '01-01-2008', 0 ],
-        'PROGRAM_X_WEBSITE'         => [509548],
-        'PROGRAM_X_LAST_UPDATED'    => [509548],
-        'SYNONYM_STEM_X_WORD_STEM'  => ['alcohol'],
+        'PROGRAM_X_PROGRAM_CONTACT_FIRST_LAST_NAME_EMAIL' =>
+            [ '103553', 'fname', 'lname', 'a@xxxxx' ],
+        'PROGRAM_X_PROGRAM_NAME' => [ '103553', 'fname', 'lname', 'a@xxxxx' ],
+        'PROGRAM_X_WEBSITE'      => [509548],
+        'PROGRAM_X_LAST_UPDATED' => [509548],
+        'SYNONYM_STEM_X_WORD_STEM' => ['alcohol'],
 
     );
     return \%data;


Follow ups