public static function getUnlimitedRowCount($callerClass, $filter = "", $join = "")
 {
     // Init some vars
     $oTable = $table = DataObjectHelper::getTableForClass($callerClass);
     if (Object::has_extension($callerClass, 'Versioned')) {
         $stage = Versioned::current_stage();
         $table = $oTable . ($stage == 'Live' ? '_' . $stage : '');
     }
     $wSQL = "";
     //$sql = "SELECT COUNT(*) as total FROM ".$table;
     $sql = "SELECT COUNT(*) as total FROM " . SS_SITE_DATABASE_NAME . '.' . $table;
     // join
     if ($join) {
         $sql .= " " . $join;
     }
     if ($oTable != $callerClass && DataObjectHelper::tableExists($callerClass)) {
         $sql .= " LEFT JOIN " . $callerClass . " ON " . $table . ".ID = " . $callerClass . ".ID";
     }
     // Add caller class filter if its on a shared table
     if ($callerClass != $oTable) {
         $wSQL .= $wSQL ? " AND " : " WHERE ";
         $wSQL .= "(" . $table . ".ClassName='" . $callerClass . "'";
         if ($subclasses = DataObjectHelper::getSubclassesOf($callerClass)) {
             foreach ($subclasses as $subclass) {
                 $wSQL .= " OR " . $table . ".ClassName='" . $subclass . "'";
             }
         }
         $wSQL .= ")";
     }
     // Filter
     if ($filter) {
         $wSQL .= $wSQL ? " AND " : " WHERE ";
         $wSQL .= "(" . $filter . ")";
     }
     //finalise
     $sql .= $wSQL;
     return self::getUnlimitedRowCountForSQL($sql);
 }