/** * Objective-C style constructor * * @param string $queryString */ public static function initWithString($queryString) { $parts = array('prefix' => array(), 'base' => array(), 'ask' => array(), 'select_clause' => array(), 'from' => array(), 'from_named' => array(), 'where' => array(), 'order' => array(), 'limit' => array(), 'offset' => array()); $var = '[?$]{1}[\\w\\d]+'; $expr = '(\\w*\\(.*\\))'; // /(BASE.*?\s)?(PREFIX.*?\s)*(ASK|((COUNT(\s)*(\(.*?\))))|(SELECT(\s)+)(DISTINCT(\s)+)?(COUNT(\s)+(\(.*?\)(\s)))?(\?\w+\s+|\*)*)/si $tokens = array('prefix' => '/((PREFIX\\s+[^:\\s]+:\\s+<[^\\s]*>\\s*)+)/si', 'base' => '/BASE\\s+<(.+?)>/i', 'ask' => '/(ASK)/si', 'select_clause' => '/((SELECT\\s+)(DISTINCT\\s+)?)(\\*|((COUNT\\s*\\((\\?\\w*|\\*)\\)\\s+(as\\s+(\\?\\w+\\s+))?)|(\\?\\w+\\s+))*)/si', 'from' => '/FROM\\s+<(.+?)>/i', 'from_named' => '/FROM\\s+NAMED\\s+<(.+?)>/i', 'where' => '/(WHERE\\s+)?\\{.*\\}/si', 'order' => '/ORDER\\s+BY((\\s+' . $var . '|\\s+' . $expr . '|\\s+(ASC|DESC)\\s*' . $expr . ')+)/i', 'limit' => '/LIMIT\\s+(\\d+)/i', 'offset' => '/OFFSET\\s+(\\d+)/i'); foreach ($tokens as $key => $pattern) { preg_match_all($pattern, $queryString, $parts[$key]); } //echo $queryString; //var_dump($parts); $queryObject = new self(); if (isset($parts['prefix'][0][0]) || isset($parts['base'][0][0])) { $prologue = ''; if (isset($parts['base'][1][0])) { $prologue .= 'BASE <' . $parts['base'][1][0] . '>' . PHP_EOL; } if (isset($parts['prefix'][0][0])) { $prologue .= $parts['prefix'][0][0]; } $queryObject->setProloguePart($prologue); // whole match } if (isset($parts['ask'][0][0])) { $queryObject->setAsk(true); } if (isset($parts['select_clause'][0][0])) { $queryObject->setSelectClause($parts['select_clause'][0][0]); } if (isset($parts['from'][1][0])) { $queryObject->setFrom($parts['from'][1]); } if (isset($parts['from_named'][1][0])) { $queryObject->setFromNamed($parts['from_named'][1]); } if (isset($parts['where'][0][0])) { $queryObject->setWherePart($parts['where'][0][0]); } if (isset($parts['order'][1][0])) { $queryObject->setOrderClause(trim($parts['order'][1][0])); } if (isset($parts['limit'][1][0])) { $queryObject->setLimit($parts['limit'][1][0]); } if (isset($parts['offset'][1][0])) { $queryObject->setOffset($parts['offset'][1][0]); } return $queryObject; }
/** * Creation depuis une demande de devis * @todo Create a builder * @deprecated */ public static function createFromAskQuote(AskQuote $askquote) { $quote = new self(); $quote->setCreation(new \DateTime()); if (($door = $askquote->getDoor()) !== null) { $quote->setDoor($door); $quote->setDoorCp($door->toString()); $quote->setVat($door->getSite()->getVat()->getRate()); } else { $site = $askquote->getSite(); $quote->setDoorCp($site->toString()); $quote->setVat($site->getVat()->getRate()); } $quote->setTrustee($trustee = $askquote->getTrustee()); $quote->setTrusteeName($trustee->getName()); $quote->setTrusteeAddress($trustee->getAddress() . ''); $quote->setContact($askquote->getPerson()); $quote->setContactCp($askquote->getPerson() . ''); $quote->setAsk($askquote); return $quote; }