/** * The RDQL query operation operation executes a RDQL query against a model. * * @version $Id: rdql.php,v 1.8 2006/05/15 05:24:37 tgauss Exp $ * @author Phil Dawes <*****@*****.**> * * @package netapi * @todo nothing * @access public */ function rdql($model, $serializer) { if (isset($_REQUEST['closure'])) { if (strtoupper($_REQUEST['closure']) == "TRUE") { $closure = True; } else { $closure = False; } } else { $closure = False; } $query = $_REQUEST["query"]; // php appears to escape quotes, so unescape them $query = str_replace('\\"', '"', $query); $query = str_replace("\\'", "'", $query); // decode %xx $query = rawurldecode($query); /// debug //var_dump($query); $r = new RdqlParser(); $parsedq = $r->parseQuery($query); addMissingSelectVarsToQuery($parsedq); if (is_a($model, 'MemModel')) { $eng = new RdqlMemEngine(); } else { $eng = new RdqlDbEngine(); } $rdqlres = $eng->queryModel($model, $parsedq, TRUE); $rdqlIter = new RdqlResultIterator($rdqlres); $outm = new MemModel(); while ($rdqlIter->hasNext()) { $result = $rdqlIter->next(); generateResultStatementsFromVarResult($result, $parsedq, $outm, $closure, $model); } echo $serializer->Serialize($outm); $outm->close(); }
/** * Perform an RDQL query on this DbModel. * This method returns an associative array of variable bindings. * The values of the query variables can either be RAP's objects (instances of Node) * if $returnNodes set to TRUE, or their string serialization. * * @access public * @param string $queryString * @param boolean $returnNodes * @return array [][?VARNAME] = object Node (if $returnNodes = TRUE) * OR array [][?VARNAME] = string * */ function rdqlQuery($queryString, $returnNodes = TRUE) { require_once RDFAPI_INCLUDE_DIR . PACKAGE_RDQL; $parser = new RdqlParser(); $parsedQuery =& $parser->parseQuery($queryString); // this method can only query this DbModel // if another model was specified in the from clause throw an error if (isset($parsedQuery['sources'][0])) { if ($parsedQuery['sources'][0] != $this->modelURI) { $errmsg = RDFAPI_ERROR . '(class: DbModel; method: rdqlQuery):'; $errmsg .= ' this method can only query this DbModel'; trigger_error($errmsg, E_USER_ERROR); } } $engine = new RdqlDbEngine(); $res =& $engine->queryModel($this, $parsedQuery, $returnNodes); return $res; }