<?php
	$pg_result = 0;

	global $insert_tablename;
        global $insert_fieldname;
	global $pg_user, $pg_password, $pg_server;

	function mysql_num_rows($result) {  return pg_num_rows($result); }
	function mysql_numrows($result) {  return pg_num_rows($result); }
	function mysql_num_fields($result) { return 1; }
	function mysql_fetch_field($result) {  return 'tablename'; }
	function mysql_fetch_object($result) {   return pg_fetch_object($result); }
        function mysql_free_result($result) { return pg_free_result($result); }
        function mysql_affected_rows() {  return pg_affected_rows($GLOBALS[pg_result]); }
        function mysql_fetch_row($result) { return pg_fetch_row($result); }
        function mysql_data_seek($result, $offset) { return pg_result_seek ( $result, $offset ); }
	function mysql_error() {  global $pg_user; if($pg_user == '') return pg_last_error(); else return '';}
        function mysql_fetch_assoc($result) { return pg_fetch_assoc($result); }
        function mysql_escape_string($s) { return $s; }
        function mysql_get_server_info() { return '4.1.0'; }
        function mysql_result($result, $i, $fieldname) { return pg_fetch_result($result, $i, $fieldname); }

        function mysql_connect($dbserver, $dbuser, $dbpass)
	{
		global $pg_user, $pg_password, $pg_server;

		$pg_user = $dbuser;
		$pg_password = $dbpass;
		$pg_server = $dbserver;

		// return pg_connect("host=$dbserver user=$dbuser password=$dbpass dbname="); 
		return 1;
	}

	function mysql_fetch_array($result)
	{
		$result = pg_fetch_array($result);
		
		if( is_array($result) )
		foreach($result as $v => $k )
			$result[$v] = trim($k);
			
		return $result;
	}

	function mysql_select_db($dbname, $connection_id = 0)
	{
		global $pg_user, $pg_password, $pg_server;
		$conn = pg_connect("host=$pg_server user=$pg_user password=$pg_password dbname=$dbname");
		$pg_user = '';
		$pg_password = '';
		$pg_server = '';
		return $conn;
	}

	function sanitize_insertinto($sql_in)
	{
		$pattern = '/INSERT INTO (\w+)/';
		preg_match($pattern, $sql_in, $matches, PREG_OFFSET_CAPTURE);
		$insert_stmt = $matches[0][0];
		$s = preg_replace($pattern, '', $sql_in);
		// match fieldnames
		$s = trim($s, " \n\t()");	
		$fields = split(', ', $s);
	
		// match quoted values
		$pattern = "/'(.*?)'/";
		preg_match_all($pattern, $sql_in, $matches);
		$matches = $matches[0];

		$field_list = '';
		$value_list = '';

		foreach($matches as $i=>$match)
			if($match != "''")
			{
			$value_list .= $match . ', ';
			$field_list .= $fields[$i] . ', ';
			}			
		$value_list = trim($value_list, ' ,');
		$field_list = trim($field_list, ' ,');

		$insert_stmt = trim($insert_stmt, " \t\n()");

		$sql_out = trim( "$insert_stmt ($field_list) VALUES ($value_list)", ' (');
		$sql_out = str_replace("\n", "", $sql_out);
		return $sql_out;
	}

	function mysql_query($sql)
	{
		global $insert_tablename;
		global $insert_fieldname;

		// Wordpress
		$sql = str_replace("SHOW TABLES", "select tablename from pg_tables where schemaname = 'public'", $sql);

		// Sanitize 
		// remove illegal characters
                $sql = str_replace("`", "", $sql);
		$sql = str_replace("DEFAULT CHARACTER SET utf8", "", $sql);

		// translate types
		if(strstr($sql, "CREATE TABLE"))
		{
		$sql = str_replace("bigint(20)", "int", $sql);
		$sql = str_replace("tinyint(1)", "int", $sql);
		$sql = str_replace("longtext", "text", $sql);
		$sql = str_replace("tinytext", "text", $sql);
		$sql = str_replace("mediumtext", "text", $sql);
		$sql = str_replace("default '0000-00-00 00:00:00'", "default now()", $sql);
		$sql = str_replace("unsigned", "", $sql);
		$sql = str_replace("int(11)", "int", $sql);
		$sql = str_replace("int(4)", "int", $sql);
		$sql = str_replace("datetime", "timestamp", $sql);

		// WP specific types
                $sql = str_replace("enum('0','1','spam')", "varchar(4)", $sql);
                $sql = str_replace("enum('yes','no')", "varchar(3)", $sql);
                $sql = str_replace("enum('Y','N')", "varchar(1)", $sql);
                $sql = str_replace("enum('publish','draft','private','static','object','attachment','inherit','future')", "varchar(15)", $sql);
                $sql = str_replace("enum('open','closed','registered_only')", "varchar(20)", $sql);
                $sql = str_replace("enum('open','closed')", "varchar(10)", $sql);

		// unsupported INDEX/KEY construct
                $pattern = '/\,[ \n]+KEY[ ]+[a-zA-Z_]+[ ]+\([a-zA-Z_,]+\)/';
                $sql = preg_replace($pattern, "", $sql);

		 // fix auto_increment
                $pattern = '/CREATE TABLE (\w+)/';
                preg_match($pattern, $sql, $matches, PREG_OFFSET_CAPTURE);
                $match = $matches[0][0];
                $match_list = split(' ', $match);
                $tablename = $match_list[2];

                $pattern = '/int[ ]+NOT NULL auto_increment/';
                preg_match($pattern, $sql, $matches, PREG_OFFSET_CAPTURE);
                if($matches)
                {
                        $match = $matches[0][0];
                        $match_list = split(' ' , $match);
                        $match = $tablename . '_seq';

                        $sql = str_replace("NOT NULL auto_increment", "default nextval('$match'::text) NOT NULL", $sql);
                        $sql .= "; CREATE SEQUENCE $match";
                }

		$pattern = '/int[ ]+NOT NULL auto_increment/';
                $sql = preg_replace($pattern, 'serial NOT NULL',  $sql);

		if(strstr($sql, "wp_posts"))
		{
			$sql .= "; alter table wp_posts alter post_excerpt set default ''; alter table wp_posts alter to_ping set default ''; alter table wp_posts alter pinged set default ''; alter table wp_posts alter post_content_filtered set default '';";
			$sql .= " ; alter table wp_posts alter post_date_gmt set default now() at time zone 'gmt';  alter table wp_posts alter post_modified_gmt set default now() at time zone 'gmt' ";
		}
 	
		} // CREATE TABLE 
  
		// field names with CAPITALS
		if(strstr($sql, "ID"))
		{
		$pattern = '/[a-z_]+ID/';
                $sql = preg_replace($pattern, '"$0"', $sql);

		$pattern = '/  ID /';
                $sql = preg_replace($pattern, '  "ID" ', $sql);

		$pattern = '/\(ID\)/';
                $sql = preg_replace($pattern, '("ID")', $sql);

		$pattern = '/ ID /';
		$sql = preg_replace($pattern, ' "ID" ', $sql);
	
		$pattern = '/ ID,/';
                $sql = preg_replace($pattern, ' "ID",', $sql);
		
		$pattern = '/ ID=/';
                $sql = preg_replace($pattern, ' "ID"=', $sql);
		
		$pattern = '/\.ID/';
                $sql = preg_replace($pattern, '."ID"', $sql);
		} // CAPITALS

		// get rid of IGNORE before INSERT manipulation
		$sql = str_replace(' IGNORE ', ' ' , $sql);

		if(strstr($sql,"INSERT"))
		{
		$sql = str_replace('(1,',"('1',", $sql);

		$pattern = '/INSERT INTO (\w+)[ \t\n]+\([ a-zA-Z_"]+/';
		preg_match($pattern, $sql, $matches, PREG_OFFSET_CAPTURE);
		$match = $matches[0][0];
                $match_list = split(' ', $match);
                $insert_tablename = $match_list[2];
		if($insert_tablename)
		{
			$insert_fieldname = trim($match_list[3],' ()	');
			if(!$insert_fieldname)
				$insert_fieldname = trim($match_list[4],' ()	');
		}

		// fix inserts into wp_categories
		if(strstr($sql, "INSERT INTO wp_categories"))
		{
			$sql = str_replace('"cat_ID",', '', $sql);
			$sql = str_replace("VALUES ('0',", "VALUES(", $sql);
		}
		
		$sql = str_replace( "INSERT INTO wp_post2cat (rel_id, post_id, category_id) VALUES ('1', 1, 1)",  "INSERT INTO wp_post2cat (post_id, category_id) VALUES (1, 1)", $sql);

		// filter out '' entries in inserts
		if(strstr($sql, "''") && strstr($sql, 'wp_posts'))
			$sql = sanitize_insertinto($sql);
		
		} // INSERT

		// Wordpress, operation
		$sql = str_replace('SQL_CALC_FOUND_ROWS', '', $sql);
		$sql = str_replace('FOUND_ROWS()', '10', $sql);
		
		$pattern = '/LIMIT[ ]+(\d+),[ ]*(\d+)/';
		$sql = preg_replace($pattern, 'LIMIT $2 OFFSET $1', $sql);

		$sql = str_replace('DISTINCT', '', $sql);
		$sql = str_replace('INTERVAL 120 MINUTE', "'120 minutes'::interval", $sql);
		$sql = str_replace('ORDER BY post_date', 'ORDER BY YEAR(post_date), MONTH(post_date)', $sql);
		$sql = str_replace('GROUP BY wp_posts."ID"', '' , $sql);
		$sql = str_replace('GROUP BY meta_key', '', $sql);
		$sql = str_replace("!= ''", '<> 0', $sql);

		$GLOBALS[pg_result] = pg_query($sql);

		return $GLOBALS[pg_result];
	}

	function mysql_insert_id($table)
	{
		global $insert_tablename, $insert_fieldname;

		$tbls = split("\n", $insert_tablename); // workaround for bad tablename
		$t = $tbls[0] . '_seq';

		if($insert_fieldname == '"cat_ID"' || $insert_fieldname == 'rel_id')
			$res = pg_query("SELECT MAX($insert_fieldname)+1 FROM $insert_tablename");
		else
			$res = pg_query("SELECT currval('$t')");

		return pg_fetch_result($res, 0, 0);
	}

?>
