Ejemplo n.º 1
0
Archivo: orm.php Proyecto: nephie/Moya
 public static function query($query)
 {
     $shortq = preg_replace('/\\s*/m', '', $query);
     if (!self::$cachedStatements[$shortq] instanceof statement) {
         $lexer = new lexer();
         $parsedQuery = $lexer->parse($query);
         $statement = new statement();
         $statement->setQuery($parsedQuery);
         $datastore = $parsedQuery->getModel()->getDatastore();
         $driverclass = '\\Moya\\core\\orm\\drivers\\' . config::get('datastore', $datastore . '/driver');
         $driver = $driverclass::getInstance($datastore);
         $statement->setDriver($driver);
         $statement->setCompiledquery($driver->compileQuery($parsedQuery));
         echo $statement->getCompiledquery() . "\n";
         self::$cachedStatements[$shortq] = $statement->prepare();
     }
     return self::$cachedStatements[$shortq];
 }
Ejemplo n.º 2
0
 protected function parseSubselect(lexer $lexer)
 {
     $subtokens = array();
     $nested = 0;
     $lexer->movenext();
     while ($lexer->getCurrentToken() != ')' && $nested == 0) {
         $subtokens[] = $lexer->getCurrentToken();
         $lexer->moveNext();
         if ($lexer->getCurrentToken() == '(') {
             $nested++;
         } elseif ($lexer->getCurrentToken() == ')') {
             $nested--;
         }
     }
     $sublexer = new lexer();
     $subquery = $sublexer->parse($subtokens);
     $datastore = $subquery->getModel()->getDatastore();
     $driverclass = '\\Moya\\core\\orm\\drivers\\' . config::get('datastore', $datastore . '/driver');
     $driver = $driverclass::getInstance($datastore);
     $compiledSubquery = $driver->compileQuery($subquery);
     //TODO subselects over different datastores;
     return $compiledSubquery;
 }