[wp×SQLite]一部使えないプラグイン対応

色々変わって読みづらくなったので、いっそ書き換え

例えば
SELECT p.post_title FROM テーブル AS p
というSQLがあるとする。

MySQLなら配列は『$うんつら["post_title"]』として返してもらえるんだけど、
SQLiteだと『$うんつら["q.post_title"]』として返される。

そのせいでSimple Tags等、巧く動かないプラグインが多数ある。

前回同様SQL文を書き換えようと思ったのだけど、
『q.post_title as post_title』みたいに
『AS うんつら』と既に宣言されているものもあるのだから、なかなか巧くいかない。
※q.post_title as post_title AS post_title as post_title てなる

そこで『配列の添字を書き換えて作り直す』修正をする。

/wp-content/pdo/PDOEngine.phpの書き足し+書き換え

class PDO_Engine{~}内の最後の方に、下記を追加。

/// 再帰的配列名変更 @to
function RecurrenceCutExtraAlignmentName($Array){
	if(is_array($Array)){
		foreach($Array as $Akey => $Aval){
			$ArrTname = explode(".",$Akey,2);
			unset($Array[$Akey]);
	
			if(isset($ArrTname[1]))
				$Akey = $ArrTname[1];
	
			$Array[$Akey] = $Aval;
			if(is_array($Aval))
				$Array[$Akey] = $this->RecurrenceCutExtraAlignmentName($Aval);
		}
	}
	return $Array;
}

次に同じファイル内から
private function processResults()を探して、7・8行目を追加。

	private function processResults(){
		if(in_array($this->queryType, array("select", "describe","show")) && $this->needsPostProcessing){
			$this->results = $this->rewriteEngine->processResults($this->_results);
		}else{
			$this->results = $this->_results;
		}
		// @to
		$this->results = $this->RecurrenceCutExtraAlignmentName($this->results);
	}

結構無理矢理。

とりあえずは動いてるから、ログを見ながら様子見。

公開:2009/7/14 @ 00:06
更新:2009/7/19 @ 00:56
更新:2009/10/27 @ 23:44
更新:2010/1/31 @ 23:06

コメント

タイトルとURLをコピーしました