Author: david
Date: Thu Feb  9 17:18:33 2012
New Revision: 10835

Log:
Start factoring out ORM code

Modified:
   trunk/lib/QubitSearchPdo.class.php

Modified: trunk/lib/QubitSearchPdo.class.php
==============================================================================
--- trunk/lib/QubitSearchPdo.class.php  Thu Feb  9 16:37:03 2012        (r10834)
+++ trunk/lib/QubitSearchPdo.class.php  Thu Feb  9 17:18:33 2012        (r10835)
@@ -92,38 +92,46 @@
     if (-1 < $ioOffset)
     {
       // Get count of all information objects
-      $sql = 'SELECT COUNT(*) from '.QubitInformationObject::TABLE_NAME;
+      $sql = 'SELECT COUNT(*) FROM '.QubitInformationObject::TABLE_NAME;
       $rs = $conn->query($sql);
       $rowcount = $rs->fetchColumn(0);
 
-      // Get info objects (with offset)
-      $criteria = new Criteria;
-      QubitInformationObject::addSelectColumns($criteria);
+      $offset = 0;
+      if (0 < intval($ioOffset))
+      {
+        $offset = intval($ioOffset);
+      }
 
-      if (0 < $ioOffset)
+      // Get info objects (with offset)
+      $sql  = 'SELECT io.*, i18n.*, slug.slug FROM 
'.QubitInformationObject::TABLE_NAME.' io';
+      $sql .= ' JOIN '.QubitInformationObjectI18n::TABLE_NAME.' i18n';
+      $sql .= '   ON io.id = i18n.id';
+      $sql .= ' JOIN '.QubitSlug::TABLE_NAME.' slug';
+      $sql .= '   ON io.id = slug.object_id';
+      $sql .= ' LIMIT :offset, :limit';
+
+      $statement = $conn->prepare($sql);
+      if (!$statement->execute(array(
+        ':offset' => $offset,
+        ':limit'  => $rowcount))
       {
-        $criteria->setOffset($ioOffset);
+        throw new sfException('Select failed');
       }
 
-      $informationObjects = QubitInformationObject::get($criteria);
+      if ($i == 0 && 0 < $offset)
+      {
+        $this->getLogger()->log("Ignoring first $offset information objects.");
+      }
 
       // Loop through results, and add to search index
-      foreach ($informationObjects as $key => $informationObject)
+      $i = 0;
+      while ($resource = $statemtent->fetch(PDO::FETCH_OBJ))
       {
-        if ($key == 0 && 0 < $ioOffset)
-        {
-          $this->getLogger()->log('Ignoring first '.$ioOffset.' information 
objects.');
-        }
+        self::addInformationObjectIndex($resource, $resource->culture, 
$options);
 
-        if (0 < count($languages = 
$this->getTranslatedLanguages($informationObject)))
-        {
-          foreach ($languages as $language)
-          {
-            self::addInformationObjectIndex($informationObject, $language, 
$options);
-          }
-        }
+        $this->getLogger()->log('"'.$row[QubitInformationObjectI18n::TITLE].'" 
inserted ('.round(microtime(true) - $start, 2).'s) ('.($i + $offset + 
1).'/'.$rowcount.')', $this->getName());
 
-        $this->getLogger()->log('"'.$informationObject->__toString().'" 
inserted ('.round(microtime(true) - $start, 2).'s) ('.($key + $ioOffset + 
1).'/'.$rowcount.')', $this->getName());
+        $i++;
       }
     }
     else
@@ -134,10 +142,10 @@
     $this->getLogger()->log('Index populated in "'.round(microtime(true) - 
$start, 2).'" seconds.', $this->getName());
   }
 
-  public static function addInformationObjectIndex(QubitInformationObject 
$informationObject, $language, $options = array())
+  public static function addInformationObjectIndex($resource, $language, 
$options = array())
   {
     // Only ROOT node should have no parent, don't index
-    if (null === $informationObject->parent)
+    if (null === $resource->parent_id)
     {
       return;
     }
@@ -145,20 +153,40 @@
     $doc = new Zend_Search_Lucene_Document;
 
     // Reference elements
-    $doc->addField(Zend_Search_Lucene_Field::Keyword('id', 
$informationObject->id));
-    $doc->addField(Zend_Search_Lucene_Field::Keyword('slug', 
$informationObject->slug));
+    $doc->addField(Zend_Search_Lucene_Field::Keyword('id', $resource->id));
+    $doc->addField(Zend_Search_Lucene_Field::Keyword('slug', $resource->slug));
     $doc->addField(Zend_Search_Lucene_Field::Keyword('culture', $language));
     $doc->addField(Zend_Search_Lucene_Field::Keyword('className', 
'QubitInformationObject'));
 
-    $doc->addField(Zend_Search_Lucene_Field::UnIndexed('parentId', 
$informationObject->parentId));
-    $doc->addField(Zend_Search_Lucene_Field::Keyword('parent', 
$informationObject->parent->slug));
+    $doc->addField(Zend_Search_Lucene_Field::UnIndexed('parent_id', 
$resource->parent_id));
+    $doc->addField(Zend_Search_Lucene_Field::Keyword('parent', 
$resource->parent->slug));
 
-    $doc->addField(Zend_Search_Lucene_Field::UnIndexed('collectionRootId', 
$informationObject->getCollectionRoot()->id));
-    $doc->addField(Zend_Search_Lucene_Field::Keyword('collectionRootSlug', 
$informationObject->getCollectionRoot()->slug));
-    $doc->addField(Zend_Search_Lucene_Field::UnIndexed('collectionRootTitle', 
$informationObject->getCollectionRoot()->getTitle()));
+    // Get collection root
+    $sql = 'SELECT
+               root.id,
+               slug,
+               title,
+               culture
+             FROM '.QubitInformationObject::TABLE_NAME.' node,
+             JOIN '.QubitInformationObjectI18n.' i18n
+               ON node.id = i18n.id
+             JOIN '.QubitSlug::TABLE_NAME.' slug
+               ON node.id = slug.id
+             WHERE node.lft < ? AND node.rgt > ?
+             ORDER BY node.lft
+             LIMIT 1';
+    $statement = $conn->prepare($sql);
+    if ($statement->execute(array($resource->lft, $resource->rgt))
+    {
+      $collectionRoot = $statement->fetch(PDO::FETCH_OBJ);
+
+      $doc->addField(Zend_Search_Lucene_Field::UnIndexed('collectionRootId', 
$collectionRoot->id));
+      $doc->addField(Zend_Search_Lucene_Field::Keyword('collectionRootSlug', 
$collectionRoot->slug));
+      
$doc->addField(Zend_Search_Lucene_Field::UnIndexed('collectionRootTitle', 
$collectionRoot->title));
+    }
 
     // Digital object information
-    if ($digitalObject = $informationObject->getDigitalObject())
+    if ($digitalObject = $resource->getDigitalObject())
     {
       $doc->addField(Zend_Search_Lucene_Field::Keyword('hasDigitalObject', 
'true'));
 
@@ -180,13 +208,13 @@
 
     // Title
     // include an i18n fallback for proper search result display in case the 
title field was not translated
-    if (0 < strlen($informationObject->getTitle(array('culture' => 
$language))))
+    if (0 < strlen($resource->getTitle(array('culture' => $language))))
     {
-      $titleField = Zend_Search_Lucene_Field::Text('title', 
$informationObject->getTitle(array('culture' => $language)));
+      $titleField = Zend_Search_Lucene_Field::Text('title', 
$resource->getTitle(array('culture' => $language)));
     }
     else
     {
-      $titleField = Zend_Search_Lucene_Field::Text('title', 
$informationObject->getTitle(array('sourceCulture' => true)));
+      $titleField = Zend_Search_Lucene_Field::Text('title', 
$resource->getTitle(array('sourceCulture' => true)));
     }
 
     // Boost the hit relevance for the title field
@@ -194,15 +222,15 @@
     $doc->addField($titleField);
 
     // Publication status
-    $doc->addField(Zend_Search_Lucene_Field::Text('publicationStatusId', 
$informationObject->getPublicationStatus()->status->id));
+    $doc->addField(Zend_Search_Lucene_Field::Text('publicationStatusId', 
$resource->getPublicationStatus()->status->id));
 
-    $doc->addField(Zend_Search_Lucene_Field::Text('scopeAndContent', 
$informationObject->getScopeAndContent(array('culture' => $language))));
+    $doc->addField(Zend_Search_Lucene_Field::Text('scopeAndContent', 
$resource->getScopeAndContent(array('culture' => $language))));
 
-    $doc->addField(Zend_Search_Lucene_Field::Text('referenceCode', 
$informationObject->referenceCode));
+    $doc->addField(Zend_Search_Lucene_Field::Text('referenceCode', 
$resource->referenceCode));
 
     // Store dates as serialized array
     $dates = array();
-    foreach ($informationObject->getDates() as $date)
+    foreach ($resource->getDates() as $date)
     {
       $save_date['id'] = $date->id;
       $save_date['rendered'] = 
Qubit::renderDateStartEnd($date->getDate(array('cultureFallback' => true)), 
$date->startDate, $date->endDate);
@@ -219,16 +247,16 @@
     $doc->addField(Zend_Search_Lucene_Field::UnIndexed('dates', 
serialize($dates)));
 
     // CREATOR
-    $creatorField = Zend_Search_Lucene_Field::Unstored('creator', 
$informationObject->getCreatorsNameString(array('culture' => $language)));
+    $creatorField = Zend_Search_Lucene_Field::Unstored('creator', 
$resource->getCreatorsNameString(array('culture' => $language)));
     // Boost the hit relevance for the creator field
     $creatorField->boost = 8;
     $doc->addField($creatorField);
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('creatorhistory', 
$informationObject->getCreatorsHistoryString(array('culture' => $language))));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('creatorhistory', 
$resource->getCreatorsHistoryString(array('culture' => $language))));
 
     // Level of Description
-    if (null !== $informationObject->getLevelOfDescription())
+    if (null !== $resource->getLevelOfDescription())
     {
-      $doc->addField(Zend_Search_Lucene_Field::Text('levelOfDescription', 
$informationObject->getLevelOfDescription()->getName(array('culture' => 
$language))));
+      $doc->addField(Zend_Search_Lucene_Field::Text('levelOfDescription', 
$resource->getLevelOfDescription()->getName(array('culture' => $language))));
     }
     else
     {
@@ -236,7 +264,7 @@
     }
 
     // Repository
-    $repository = $informationObject->getRepository(array('inherit' => true));
+    $repository = $resource->getRepository(array('inherit' => true));
     if (null !== $repository)
     {
       $doc->addField(Zend_Search_Lucene_Field::Keyword('repositoryId', 
$repository->id));
@@ -251,41 +279,41 @@
     }
 
     // Identifier
-    $identifierField = Zend_Search_Lucene_Field::Text('identifier', 
$informationObject->getIdentifier());
+    $identifierField = Zend_Search_Lucene_Field::Text('identifier', 
$resource->getIdentifier());
     $identifierField->boost = 5;
     $doc->addField($identifierField);
 
     // I18n fields
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('alternatetitle', 
$informationObject->getAlternateTitle(array('culture' => $language))));
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('edition', 
$informationObject->getEdition(array('culture' => $language))));
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('extentandmedium', 
$informationObject->getExtentAndMedium(array('culture' => $language))));
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('archivalhistory', 
$informationObject->getArchivalHistory(array('culture' => $language))));
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('acquisition', 
$informationObject->getAcquisition(array('culture' => $language))));
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('appraisal', 
$informationObject->getAppraisal(array('culture' => $language))));
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('accruals', 
$informationObject->getAccruals(array('culture' => $language))));
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('arrangement', 
$informationObject->getArrangement(array('culture' => $language))));
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('accessconditions', 
$informationObject->getAccessConditions(array('culture' => $language))));
-    
$doc->addField(Zend_Search_Lucene_Field::Unstored('reproductionconditions', 
$informationObject->getReproductionConditions(array('culture' => $language))));
-    
$doc->addField(Zend_Search_Lucene_Field::Unstored('physicalcharacteristics', 
$informationObject->getPhysicalCharacteristics(array('culture' => $language))));
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('findingaids', 
$informationObject->getFindingAids(array('culture' => $language))));
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('locationoforiginals', 
$informationObject->getLocationOfOriginals(array('culture' => $language))));
-    $doc->addField(Zend_Search_Lucene_Field::Unstored('locationofcopies', 
$informationObject->getLocationOfCopies(array('culture' => $language))));
-    
$doc->addField(Zend_Search_Lucene_Field::Unstored('relatedunitsofdescription', 
$informationObject->getRelatedUnitsOfDescription(array('culture' => 
$language))));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('alternatetitle', 
$resource->getAlternateTitle(array('culture' => $language))));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('edition', 
$resource->getEdition(array('culture' => $language))));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('extentandmedium', 
$resource->getExtentAndMedium(array('culture' => $language))));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('archivalhistory', 
$resource->getArchivalHistory(array('culture' => $language))));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('acquisition', 
$resource->getAcquisition(array('culture' => $language))));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('appraisal', 
$resource->getAppraisal(array('culture' => $language))));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('accruals', 
$resource->getAccruals(array('culture' => $language))));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('arrangement', 
$resource->getArrangement(array('culture' => $language))));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('accessconditions', 
$resource->getAccessConditions(array('culture' => $language))));
+    
$doc->addField(Zend_Search_Lucene_Field::Unstored('reproductionconditions', 
$resource->getReproductionConditions(array('culture' => $language))));
+    
$doc->addField(Zend_Search_Lucene_Field::Unstored('physicalcharacteristics', 
$resource->getPhysicalCharacteristics(array('culture' => $language))));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('findingaids', 
$resource->getFindingAids(array('culture' => $language))));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('locationoforiginals', 
$resource->getLocationOfOriginals(array('culture' => $language))));
+    $doc->addField(Zend_Search_Lucene_Field::Unstored('locationofcopies', 
$resource->getLocationOfCopies(array('culture' => $language))));
+    
$doc->addField(Zend_Search_Lucene_Field::Unstored('relatedunitsofdescription', 
$resource->getRelatedUnitsOfDescription(array('culture' => $language))));
 
     // Subjects
-    $subjectField = Zend_Search_Lucene_Field::Unstored('subject', 
$informationObject->getAccessPointsString(QubitTaxonomy::SUBJECT_ID, 
array('culture' => $language)));
+    $subjectField = Zend_Search_Lucene_Field::Unstored('subject', 
$resource->getAccessPointsString(QubitTaxonomy::SUBJECT_ID, array('culture' => 
$language)));
     // Boost the hit relevance for the subject field
     $subjectField->boost = 5;
     $doc->addField($subjectField);
 
     // Place
-    $placeField = Zend_Search_Lucene_Field::Unstored('place', 
$informationObject->getAccessPointsString(QubitTaxonomy::PLACE_ID, 
array('culture' => $language)));
+    $placeField = Zend_Search_Lucene_Field::Unstored('place', 
$resource->getAccessPointsString(QubitTaxonomy::PLACE_ID, array('culture' => 
$language)));
     // Boost the hit relevance for the place field
     $placeField->boost = 3;
     $doc->addField($placeField);
 
     // Names
-    $nameField = Zend_Search_Lucene_Field::Unstored('name', 
$informationObject->getNameAccessPointsString(array('culture' => $language)));
+    $nameField = Zend_Search_Lucene_Field::Unstored('name', 
$resource->getNameAccessPointsString(array('culture' => $language)));
     // Boost the hit relevance for the place field
     $nameField->boost = 3;
     $doc->addField($nameField);
@@ -295,7 +323,7 @@
     $scripts = $cultureInfo->getScripts();
 
     // Languages
-    if (0 < count($properties = $informationObject->getProperties($name = 
'language')))
+    if (0 < count($properties = $resource->getProperties($name = 'language')))
     {
       $languageCodes = 
unserialize($properties->offsetGet(0)->getValue(array('sourceCulture' => 
true)));
 
@@ -311,7 +339,7 @@
     }
 
     // Scripts
-    if (0 < count($properties = $informationObject->getProperties($name = 
'script')))
+    if (0 < count($properties = $resource->getProperties($name = 'script')))
     {
       $scriptCodes = 
unserialize($properties->offsetGet(0)->getValue(array('sourceCulture' => 
true)));
 
@@ -327,7 +355,7 @@
     }
 
     // Notes
-    if (0 < count($notes = $informationObject->getNotes()))
+    if (0 < count($notes = $resource->getNotes()))
     {
       $noteString = '';
       foreach ($notes as $note)

-- 
You received this message because you are subscribed to the Google Groups 
"Qubit Toolkit Commits" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/qubit-commits?hl=en.

Reply via email to