You are here

function ARC_sparql2sql_rewriter::get_result_vars_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_result_vars_code()
  2. 6.2 arc/ARC_sparql2sql_rewriter.php \ARC_sparql2sql_rewriter::get_result_vars_code()
  3. 6 arc/ARC_sparql2sql_rewriter.php \ARC_sparql2sql_rewriter::get_result_vars_code()
2 calls to ARC_sparql2sql_rewriter::get_result_vars_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 318

Class

ARC_sparql2sql_rewriter

Code

function get_result_vars_code($args = "") {
  $result = "";
  $union_branch_id = "";
  if (is_array($args)) {
    foreach ($args as $k => $v) {
      ${$k} = $v;
    }
  }

  /* union_branch_id */
  $vars = $this->infos["result_vars"] ? $this->infos["result_vars"] : array();
  $added_aliases = array();

  /* each id2val join needs a separate alias */
  $conv_id = in_array($this->config["id_type"], array(
    "hash_int",
    "incr_int",
  ));
  foreach ($vars as $cur_var) {
    if (($alias_infos = @$this->term2alias[$cur_var]) || ($alias_infos = @$this->optional_term2alias[$cur_var])) {
      $result .= strlen($result) ? ", \n " : "\n ";
      $null_var = false;

      /* whether var occurs in global pattern or current union_branch */
      $alias_info = $alias_infos[0];
      if ($union_branch_id) {
        $null_var = true;
        foreach ($alias_infos as $cur_alias_info) {

          /* todo: nested unions */
          if (!$cur_alias_info["union_branch_id"] || $cur_alias_info["union_branch_id"] == $union_branch_id) {

            /* global var */
            $null_var = false;
            $alias_info = $cur_alias_info;
            break;
          }
        }
      }
      $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++;
      }
      $full_tbl_alias = $tbl_alias . ".val";

      /* alias alternatives (peer optionals handling) */
      if ($alts = @$this->alias_alternatives["T" . $alias . "." . $col]) {
        $sub_result = "IFNULL(" . $tbl_alias . ".val, ";
        $sub_result_2 = "IFNULL(T" . $alias . ".__placeholder__, ";
        for ($i = 0, $i_max = count($alts); $i < $i_max; $i++) {
          $cur_alt = $alts[$i];
          $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++;
          }
          $sub_result .= $i < $i_max - 1 ? "IFNULL(" . $alt_tbl_alias . ".val" : $alt_tbl_alias . ".val";
          $sub_result_2 .= $i < $i_max - 1 ? "IFNULL(T" . $alt_alias . ".__placeholder__" : "T" . $alt_alias . ".__placeholder__";
        }
        for ($i = 0; $i < $i_max; $i++) {
          $sub_result .= ")";
          $sub_result_2 .= ")";
        }
        $full_tbl_alias = $sub_result;
      }
      $result .= $null_var ? "CONCAT('NULL ', " . $full_tbl_alias . ") AS `" . $cur_var . "`" : $full_tbl_alias . " AS `" . $cur_var . "`";
      $added_aliases[] = $tbl_alias;
      if ($col == "s") {
        if (@$sub_result_2) {
          $result .= ",\n   " . str_replace("__placeholder__", "s_type", $sub_result_2) . " AS `" . $cur_var . "__type`";
        }
        else {
          $result .= ",\n   T" . $alias . ".s_type AS `" . $cur_var . "__type`";
        }
      }
      if ($col == "o") {
        if (@$sub_result_2) {
          $result .= ",\n   " . str_replace("__placeholder__", "o_type", $sub_result_2) . " AS `" . $cur_var . "__type`";
          $result .= ",\n   " . str_replace("__placeholder__", "o_lang", $sub_result_2) . " AS `" . $cur_var . "__lang`";
          if ($conv_id) {
            $result .= ",\n   CONV(" . str_replace("__placeholder__", "o_dt", $sub_result_2) . ", 10, 16) AS `" . $cur_var . "__dt`";
          }
          else {
            $result .= ",\n   " . str_replace("__placeholder__", "o_dt", $sub_result_2) . " AS `" . $cur_var . "__dt`";
          }
        }
        else {
          $result .= ",\n   T" . $alias . ".o_type AS `" . $cur_var . "__type`";
          $result .= ",\n   T" . $alias . ".o_lang AS `" . $cur_var . "__lang`";
          if ($conv_id) {
            $result .= ",\n   CONV(T" . $alias . ".o_dt, 10, 16) AS `" . $cur_var . "__dt`";
          }
          else {
            $result .= ",\n   T" . $alias . ".o_dt AS `" . $cur_var . "__dt`";
          }
        }
      }
    }
    elseif ($alias_infos = @$this->graph_term2alias[$cur_var]) {
      $alias = $alias_infos[0]["alias"];
      $tbl_alias = "V" . $alias . "_g";
      $result .= strlen($result) ? ", \n " : "\n ";
      $result .= $tbl_alias . ".val AS `" . $cur_var . "`";
    }
  }
  return $result;
}