/**
  * Internally called method to assist with calling Qcodo Query for this class
  * on load methods.
  * @param QQueryBuilder &$objQueryBuilder the QueryBuilder object that will be created
  * @param QQCondition $objConditions any conditions on the query, itself
  * @param QQClause[] $objOptionalClausees additional optional QQClause objects for this query
  * @param mixed[] $mixParameterArray a array of name-value pairs to perform PrepareStatement with (sending in null will skip the PrepareStatement step)
  * @param boolean $blnCountOnly only select a rowcount
  * @return string the query statement
  */
 protected static function BuildQueryStatement(&$objQueryBuilder, QQCondition $objConditions, $objOptionalClauses, $mixParameterArray, $blnCountOnly)
 {
     // Get the Database Object for this Class
     $objDatabase = AuthorizationLevel::GetDatabase();
     // Create/Build out the QueryBuilder object with AuthorizationLevel-specific SELET and FROM fields
     $objQueryBuilder = new QQueryBuilder($objDatabase, 'authorization_level');
     AuthorizationLevel::GetSelectFields($objQueryBuilder);
     $objQueryBuilder->AddFromItem('`authorization_level` AS `authorization_level`');
     // Set "CountOnly" option (if applicable)
     if ($blnCountOnly) {
         $objQueryBuilder->SetCountOnlyFlag();
     }
     // Apply Any Conditions
     if ($objConditions) {
         $objConditions->UpdateQueryBuilder($objQueryBuilder);
     }
     // Iterate through all the Optional Clauses (if any) and perform accordingly
     if ($objOptionalClauses) {
         if (!is_array($objOptionalClauses)) {
             throw new QCallerException('Optional Clauses must be a QQ::Clause() or an array of QQClause objects');
         }
         foreach ($objOptionalClauses as $objClause) {
             $objClause->UpdateQueryBuilder($objQueryBuilder);
         }
     }
     // Get the SQL Statement
     $strQuery = $objQueryBuilder->GetStatement();
     // Prepare the Statement with the Query Parameters (if applicable)
     if ($mixParameterArray) {
         if (is_array($mixParameterArray)) {
             if (count($mixParameterArray)) {
                 $strQuery = $objDatabase->PrepareStatement($strQuery, $mixParameterArray);
             }
             // Ensure that there are no other Unresolved Named Parameters
             if (strpos($strQuery, chr(QQNamedValue::DelimiterCode) . '{') !== false) {
                 throw new QCallerException('Unresolved named parameters in the query');
             }
         } else {
             throw new QCallerException('Parameter Array must be an array of name-value parameter pairs');
         }
     }
     // Return the Objects
     return $strQuery;
 }