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