public static function GetDistinctForColumns($dataMatcherLinkOnePart, $perPage, $pageNo, $searchTerms = null)
 {
     $from = (object) array('sid' => $dataMatcherLinkOnePart->sid, 'tableName' => "[{$dataMatcherLinkOnePart->tableName}]");
     $fromArray = array($from);
     $transHandler = new TransformationHandler();
     $columnNames = array();
     $columnNamesNoBrack = array();
     $whereArray = array();
     //  foreach ($dataMatcherLinkOnePart->transformation as $key=>$transformation) {
     $column = $transHandler->decodeTransformationInput($dataMatcherLinkOnePart->transformation, true);
     $columnNames[] = "[{$column}]";
     $columnNamesNoBrack[] = $column;
     if (isset($searchTerms)) {
         if (isset($searchTerms[$dataMatcherLinkOnePart->transformation])) {
             $whereArray[] = " [{$column}] like '%" . $searchTerms[$dataMatcherLinkOnePart->transformation] . "%' ";
         }
     }
     //  }
     $columns = implode(",", array_values($columnNames));
     $where = null;
     if (count($whereArray) > 0) {
         $where = "where " . implode(" and ", array_values($whereArray));
     }
     $queryEngine = new QueryEngine();
     $result = new stdClass();
     $result->columns = $columnNamesNoBrack;
     $result->rows = $queryEngine->doQuery("SELECT distinct {$columns}", $fromArray, $where, null, null, $perPage, $pageNo);
     $result->totalRows = $queryEngine->doQuery("SELECT COUNT(distinct {$columns}) as ct", $fromArray, $where, null, null, null, null);
     return $result;
 }
 public function GetLinksByRelId($relId, $simThreshold)
 {
     $links = array();
     $linksSql = "select cl_from, cl_to from `colfusion_relationships_columns` where rel_id = '" . mysql_real_escape_string($relId) . "'";
     $linkInfos = $this->ezSql->get_results($linksSql);
     $linkRatioSql = "select cl_from, cl_to, dataMatchingFromRatio, dataMatchingToRatio from colfusion_relationships_columns_dataMathing_ratios where similarity_threshold = {$simThreshold}";
     $linkRatios = $this->ezSql->get_results($linkRatioSql);
     $linkRatioValues = array();
     foreach ($linkRatios as $linkRatio) {
         $linkRatioValues["{$linkRatio->cl_from}_{$linkRatio->cl_to}"]['fromRatio'] = $linkRatio->dataMatchingFromRatio;
         $linkRatioValues["{$linkRatio->cl_from}_{$linkRatio->cl_to}"]['toRatio'] = $linkRatio->dataMatchingToRatio;
     }
     $transHandler = new TransformationHandler();
     foreach ($linkInfos as $linkInfo) {
         $link = new ColfusionLink();
         $link->fromPart = $transHandler->decodeTransformationInput($linkInfo->cl_from, true);
         $link->toPart = $transHandler->decodeTransformationInput($linkInfo->cl_to, true);
         $link->fromPartEncoded = $linkInfo->cl_from;
         $link->toPartEncoded = $linkInfo->cl_to;
         $link->fromRatio = $linkRatioValues["{$link->fromPartEncoded}_{$link->toPartEncoded}"]['fromRatio'];
         $link->toRatio = $linkRatioValues["{$link->fromPartEncoded}_{$link->toPartEncoded}"]['toRatio'];
         $links[] = $link;
     }
     return $links;
 }
Пример #3
0
 public function doQuery($select, $from, $where, $groupby, $relationships, $perPage, $pageNo)
 {
     //TODO: fix it, transformation should also accept sybmols in which to enclose table and column names
     $transHandler = new TransformationHandler();
     if (count($from) == 1) {
         // then we don't need to do any joins.
         $dataset = $from[0];
         //TODO seems like inputObj is an array. This need to be fixed
         if (is_array($dataset->inputObj)) {
             $dataset->inputObj = json_decode(json_encode($dataset->inputObj));
         }
         if (isset($dataset->inputObj->oneSid)) {
             if ($dataset->inputObj->oneSid === "true" || $dataset->inputObj->oneSid === true) {
                 //onde story
                 $datasetObj = (object) array('sid' => $dataset->inputObj->sid, 'tableName' => $dataset->tableName);
                 //NOTE: $select, $where and $group cannot have [] sybmols comming directly from column or table name
                 $select = $transHandler->decodeTransformationInput($select, true);
                 $where = $transHandler->decodeTransformationInput($where, true);
                 $groupby = $transHandler->decodeTransformationInput($groupby, true);
                 return $this->prepareAndRunQuery($select, $datasetObj, $where, $groupby, $perPage, $pageNo);
             } else {
                 //merged stories.
                 return $this->prepareAndRunMergedDatasetQuery($select, $dataset->inputObj, $where, $groupby, $perPage, $pageNo);
             }
         } else {
             //NOTE: $select, $where and $group cannot have [] sybmols comming directly from column or table name
             $select = $transHandler->decodeTransformationInput($select, true);
             $where = $transHandler->decodeTransformationInput($where, true);
             $groupby = $transHandler->decodeTransformationInput($groupby, true);
             return $this->prepareAndRunQuery($select, $dataset, $where, $groupby, $perPage, $pageNo);
             //TODO: fix it, transformation should also accept sybmols in which to enclose table and column names
         }
     } else {
         // need to do joins
         // TODO: implement
     }
 }
 public function GetColumnsFromSource($source)
 {
     // get string names of columns which are involved in the links
     $transHandler = new TransformationHandler();
     $i = 0;
     $cidsArray = array();
     $columnNamesArray = array();
     $columnNameAndAliasArray = array();
     $columnAliasArray = array();
     //   foreach ($source->transformation as $key=>$transformation) {
     //TODO: fix, currently only one column, no transformation is supported.
     $ar = array("cid(", ")");
     $cidsArray[] = str_replace($ar, "", $source->transformation);
     $columnName = $transHandler->decodeTransformationInput($source->transformation, true);
     // DALUtils::decodeLinkPart($link, $usedColumnNames);
     $columnNamesArray[] = "[" . $columnName . "]";
     // $columnAlias = "column$i";
     $i += 1;
     if (isset($columnAlias)) {
         $columnNameAndAliasArray[] = "[" . $columnName . "] as '" . $columnAlias . "'";
     } else {
         $columnNameAndAliasArray[] = "[" . $columnName . "]";
     }
     $columnAliasArray[] = $columnAlias;
     //    }
     $result = new stdClass();
     $result->cids = implode(",", array_values($cidsArray));
     $result->columnNames = implode(",", array_values($columnNamesArray));
     $result->columnNameAndAlias = implode(",", array_values($columnNameAndAliasArray));
     $result->columnAliases = implode(",", array_values($columnAliasArray));
     return $result;
 }
Пример #5
0
 function query($_datainfo)
 {
     /*
      * Here implement the query code;
      */
     if (is_null($_datainfo)) {
         $_datainfo = $this->datainfo;
         $temp = new stdClass();
         foreach ($_datainfo as $key => $value) {
             $temp->{$key} = $value;
         }
         $_datainfo = $temp;
     } else {
         $temp = new stdClass();
         foreach ($_datainfo as $key => $value) {
             $temp->{$key} = $value;
         }
         $_datainfo = $temp;
         $this->datainfo = $_datainfo;
     }
     $sid = $_datainfo->sid;
     $table = $_datainfo->table;
     $inputObj = $_datainfo->inputObj;
     $color = $_datainfo->color;
     $tableColumns = $_datainfo->tableColumns;
     $perPage = $_datainfo->perPage;
     // controls how many tuples shown on each page
     $pageNo = $_datainfo->currentPage;
     // controls which page to show, got from JS function
     $where = $_datainfo->where;
     $from = (object) array('inputObj' => $inputObj, 'tableName' => "[{$table}]");
     $fromArray = array($from);
     $queryEngine = new QueryEngine();
     $totalTuple = $queryEngine->doQuery("SELECT COUNT(*)", $fromArray, null, null, null, null, null);
     $tp = 0;
     foreach ($totalTuple[0] as $value) {
         $tp = $value;
     }
     $totalPage = ceil(intval($tp) / intval($perPage));
     $startPoint = ($pageNo - 1) * $perPage;
     $cols = '';
     if (empty($tableColumns)) {
         //echo("Please select the columns!");
     } else {
         $transformationHandler = new TransformationHandler();
         for ($i = 0; $i < count($tableColumns); $i++) {
             $tc = (object) $tableColumns[$i];
             $prefix = $transformationHandler->getColumnPrefixByCid($tc->cid, array("tableName", "sid"));
             $cols .= "cid(" . $tc->cid . ") as [" . $prefix . $tc->columnName . "] ";
             if (!empty($tableColumns[$i + 1])) {
                 $cols .= ", ";
             }
         }
     }
     $select = "SELECT " . $cols;
     //var_dump($select);
     $resultDoQuery = $queryEngine->doQuery($select, $fromArray, null, null, null, $perPage, $pageNo);
     $returnedColumns = array();
     //var_dump($resultDoQuery);
     if (isset($resultDoQuery) && count($resultDoQuery) > 0) {
         if (is_array($resultDoQuery[0])) {
             $returnedColumns = array_keys($resultDoQuery[0]);
         } else {
             if (is_object($resultDoQuery[0])) {
                 $returnedColumns = array_keys(get_object_vars($resultDoQuery[0]));
             }
         }
     }
     $rst['content'] = $resultDoQuery;
     $rst["perPage"] = $perPage;
     $rst["totalPage"] = $totalPage;
     $rst['totalTuple'] = $totalTuple;
     $rst["pageNo"] = $pageNo;
     $rst['color'] = $color;
     $rst['tableColumns'] = $tableColumns;
     $rst['returnedColumns'] = $returnedColumns;
     $rst['currentPage'] = $pageNo;
     $rst['sid'] = $sid;
     $rst['table'] = $table;
     //$rst = json_decode('{"column":["ID","la","rownum","long","dvalue"],"data":[{"rownum":"1","ID":" 2.0","la":" 35.273637","long":" 108.0","dvalue":" 2.0"},{"rownum":"2","ID":" 3.0","la":" 40.234","long":" 119.0","dvalue":" 3.0"},{"rownum":"3","ID":" 4.0","la":" 29.873","long":" 125.0","dvalue":" 4.0"}],"Control":{"perPage":"50","totalPage":1,"pageNo":"1","cols":["ID","la","long","dvalue"],"color":"blue"}}');
     $this->queryResult = $rst;
     return $rst;
 }
include_once realpath(dirname(__FILE__)) . '/DataMatcher.php';
include_once realpath(dirname(__FILE__)) . '/DataMatcherLinkOnePart.php';
include_once realpath(dirname(__FILE__)) . '/../DAL/TransformationHandler.php';
if (!$current_user->authenticated) {
    die('Please login to use this function.');
}
$fromSid = $_POST["fromSid"];
$fromTable = $_POST["fromTable"];
$toSid = $_POST["toSid"];
$toTable = $_POST["toTable"];
$fromTransInput = $_POST["fromTransInput"];
//TODO FIXME this is not correct, we shoudl send tranformation values e.g. cid(), not decoded values, because what is there is a formula?Or make sure this approach works
$toTransInput = $_POST["toTransInput"];
//TODO FIXME this is not correct, we shoudl send tranformation values e.g. cid(), not decoded values, because what is there is a formula?
$action = $_POST["action"];
$transHandler = new TransformationHandler();
$encodedFromTrans = $transHandler->encodeTransformationInput($fromSid, $fromTable, $fromTransInput);
//$fromCids = $transHandler->getWrappedCids($encodedFromTrans);
$encodedToTrans = $transHandler->encodeTransformationInput($toSid, $toTable, $toTransInput);
//$toCids = $transHandler->getWrappedCids($encodedToTrans);
$from = new DataMatcherLinkOnePart();
$from->sid = $fromSid;
$from->tableName = $fromTable;
$from->transformation = $encodedFromTrans;
$to = new DataMatcherLinkOnePart();
$to->sid = $toSid;
$to->tableName = $toTable;
$to->transformation = $encodedToTrans;
// Params for data-tables server-side processing.
$pageLength = $_POST['pageLength'];
$page = $_POST['page'];
 public static function DecodeStringWithCids($stringToDecode)
 {
     // var_dump($stringToDecode);
     $transHandler = new TransformationHandler();
     return $transHandler->decodeTransformationInputWithPrefix($stringToDecode, array("tableName", "sid"));
 }