You are here

function ARC_sparql2sql_rewriter::get_id2val_join_code in Taxonomy import/export via XML 5.2

Same name and namespace in other branches
  1. 5 arc/ARC_sparql2sql_rewriter.php \ARC_sparql2sql_rewriter::get_id2val_join_code()
  2. 6.2 arc/ARC_sparql2sql_rewriter.php \ARC_sparql2sql_rewriter::get_id2val_join_code()
  3. 6 arc/ARC_sparql2sql_rewriter.php \ARC_sparql2sql_rewriter::get_id2val_join_code()
2 calls to ARC_sparql2sql_rewriter::get_id2val_join_code()
ARC_sparql2sql_rewriter::get_select_sql in arc/ARC_sparql2sql_rewriter.php
ARC_sparql2sql_rewriter::get_union_select_sql in arc/ARC_sparql2sql_rewriter.php

File

arc/ARC_sparql2sql_rewriter.php, line 629

Class

ARC_sparql2sql_rewriter

Code

function get_id2val_join_code() {
  $result = "\n /* id2val joins */";
  $vars = $this->infos["result_vars"] ? $this->infos["result_vars"] : array();

  /* add regex'd vars */
  foreach ($this->val_match_vars as $cur_var) {
    if (!in_array($cur_var, $vars)) {
      $vars[] = $cur_var;
    }
  }
  $added_aliases = array();

  /* each id2val join needs a separate alias */
  $tbl_name = $this->config["prefix"] . "_id2val";
  $var2tbl_alias = array();
  foreach ($vars as $cur_var) {
    $tbl_alias = "";
    if (($alias_infos = @$this->term2alias[$cur_var]) || ($alias_infos = @$this->optional_term2alias[$cur_var])) {
      $alias_info = $alias_infos[0];
      $alias = $alias_info["alias"];
      $col = $alias_info["col"];
      $term = $alias_info["term"];
      $tbl_alias = "V" . $alias;
      $alias_ext = 2;
      while (in_array($tbl_alias, $added_aliases)) {
        $tbl_alias = "V" . $alias . "_" . $alias_ext;
        $alias_ext++;
      }
      $result .= "\n LEFT JOIN " . $tbl_name . " " . $tbl_alias . " ON (";
      $result .= "" . $tbl_alias . ".id=T" . $alias . "." . $col;
      $result .= ")";
      $added_aliases[] = $tbl_alias;

      /* alias alternatives */
      if ($alias_info["optional_count"]) {
        foreach ($alias_infos as $cur_alias_info) {
          $cur_tbl_alias = "T" . $cur_alias_info["alias"] . "." . $cur_alias_info["col"];
          if ($alts = @$this->alias_alternatives[$cur_tbl_alias]) {
            foreach ($alts as $cur_alt) {
              $alt_alias = $cur_alt["alias"];
              $alt_col = $cur_alt["col"];
              $alt_tbl_alias = "V" . $alt_alias;
              $alias_ext = 2;
              while (in_array($alt_tbl_alias, $added_aliases)) {
                $alt_tbl_alias = $cur_alt . "_" . $alias_ext;
                $alias_ext++;
              }
              $result .= "\n LEFT JOIN " . $tbl_name . " " . $alt_tbl_alias . " ON (";
              $result .= "" . $alt_tbl_alias . ".id=T" . $alt_alias . "." . $alt_col;
              $result .= ")";
            }
          }
        }
      }
    }
    elseif ($alias_infos = @$this->graph_term2alias[$cur_var]) {
      $alias = $alias_infos[0]["alias"];
      $tbl_alias = "V" . $alias . "_g";
      $result .= "\n LEFT JOIN " . $tbl_name . " " . $tbl_alias . " ON (";
      $result .= "" . $tbl_alias . ".id=T" . $alias . ".g";
      $result .= ")";
    }
    if ($tbl_alias) {
      $var2tbl_alias[$cur_var] = $tbl_alias;
    }
  }

  /* regex'd vars */
  foreach ($this->val_match_vars as $cur_var) {
    $this->where_code = str_replace("V__regex_match_" . $cur_var . "__", $var2tbl_alias[$cur_var], $this->where_code);
  }
  return $result;
}