function database() { //ajaxリクエスト以外 if( !$this->RequestHandler->isAjax() ) { $this->set("result" , array("result" => "not ajax")); return; } //パラメータ解析 if ( isset( $this->params['form']['u'] ) ){ $u_userid=$this->params['form']['u']; }else{ $u_userid=""; } //$this->log("parameter=[$u_userid]",LOG_DEBUG); if( $u_userid == "" ){ $this->set("result" , array("result" => "parameter error")); return; } //事前処理 list($res,$hive_database)=CommonComponent::HiveBefore($u_userid,"show database"); if ( $res != 0 ){ $this->set("result" , array("result" => "permission error")); return; } //全データベース名取得 $cmd = CMD_HIVE . " -e 'show databases;' 2>/dev/null"; $this->log("CMD=$cmd",LOG_DEBUG); exec($cmd,$result,$retval); $this->log("CMD=$cmd => $retval",LOG_DEBUG); #結果セット $datas=array(); $total=count($result); for($i=0; $i<$total; $i++){ if ( CommonComponent::CheckDatabase($hive_database,$result[$i]) != 0 ){ continue; } $datas[]=array("id"=>$result[$i], "caption"=>$result[$i]); } $this->set("result" , array("total" => "$total","row" => $datas)); }
function CheckExplainDatabase($u_userid,$u_id,$u_databases) { //$this->log("CheckExplainDatabase($u_userid,$u_id,$u_databases)",LOG_DEBUG); if ( $u_databases == "" ){ return 0; } //EXPLAIN結果ファイル読み込み $ck_flg=0; $cur_db=""; $exp_file=DIR_RESULT."/${u_userid}/${u_id}.exp"; if ( !($fp=fopen($exp_file,"r")) ){ return -1; } while(!feof($fp)){ $data = fgets($fp, 10240); $data=str_replace(array("\r\n","\n","\r"), '', $data); if ( eregi("^use ",$data) ){ list($dummy,$cur_db)=split("[ ;]",$data); } if ( eregi("TOK_QUERY|TOK_CREATETABLE|TOK_DROPTABLE",$data) ){ $array=preg_split("/[\(\)]+/",$data); foreach ($array as $i => $value) { $data=$array[$i]; if ( !eregi("^TOK_TABNAME",$data) ){ continue; } $array2 = split(" ",$data); if ( empty($array2[2]) ){ $sql_db=""; $sql_tbl=$array2[1]; }else{ $sql_db=$array2[1]; $sql_tbl=$array2[2]; } if ( $sql_db == "" ){ $sql_db=$cur_db; } //クエリを許可するか判定 if ( CommonComponent::CheckDatabase($u_databases,$sql_db) != 0 ){ $ck_flg++; } } } } fclose($fp); return $ck_flg; }