Example #1
0
/**
 * 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();
}
Example #2
0
 /**
  * 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;
 }