Seditio Source
Root |
./othercms/elxis_5.3_atlas_rev2452/includes/libraries/elxis/database/importers/pgsql.importer.php
<?php
/**
* @version        $Id$
* @package        Elxis
* @subpackage    Database
* @copyright    Copyright (c) 2006-2012 Elxis CMS (http://www.elxis.org). All rights reserved.
* @license        Elxis Public License ( http://www.elxis.org/elxis-public-license.html )
* @author        Elxis Team ( http://www.elxis.org )
* @description     Elxis CMS is free software. Read the license for copyright notices and details
*/


class elxisPgsqlImporter extends elxisDbImporter {

    private
$replacePrefixes = false;
    private
$db2 = null;


   
/***********************/
    /* VALIDATE PARAMETERS */
    /***********************/
   
protected function validate() {
       
$req_params = array('db_host', 'db_user', 'db_pass', 'db_name', 'db_port');
        foreach (
$req_params as $req_param) {
            if (!isset(
$this->params[$req_param])) {
               
$this->error = true;
               
$this->errormsg = 'Required parameter '.$req_param.' is not set!';
                return
false;
            }
            if (
$req_param == 'db_port') { $this->params['db_port'] = (int)$this->params['db_port']; continue; }
            if (
trim($this->params[$req_param]) == '') {
               
$this->error = true;
               
$this->errormsg = 'Required parameter '.$req_param.' is empty!';
                return
false;
            }        
        }
        return
true;
    }


   
/***********************/
    /* CONNECT TO DATABASE */
    /***********************/
   
protected function connect() {
        if (!
class_exists('elxisDatabase', false)) {
            require_once(
ELXIS_PATH.'/includes/libraries/elxis/database.class.php');
        }
       
$params = array(
           
'dbtype' => 'pgsql',
           
'host' => $this->params['db_host'],
           
'port' => $this->params['db_port'],
           
'dbname' => $this->params['db_name'],
           
'username' => $this->params['db_user'],
           
'password' => $this->params['db_pass'],
           
'persistent' => 0,
           
'dsn' => '',
           
'scheme' => '',
           
'table_prefix' => $this->params['db_prefix'],
           
'debug' => 0
       
);

       
$this->db2 = new elxisDatabase($params, array(), false);
       
$okcon = $this->db2->connect('', $this->params['db_user'], $this->params['db_pass'], array(), true);
        if (!
$okcon) {
           
$this->error = true;
           
$this->errormsg = $this->db2->getErrorMsg();
            if (
$this->errormsg == '') { $this->errormsg = 'Could not connect to database!'; }
            return
false;
        }

        return
true;
    }


   
/****************************/
    /* DISCONNECT FROM DATABASE */
    /****************************/
   
public function disconnect() {
        if (
$this->db2) {
           
$this->db2->disconnect();
        }
    }


   
/**********************/
    /* IMPORT AN SQL FILE */
    /**********************/
   
public function import() {
        if (
$this->error) { return false; }
        if (!isset(
$this->params['file'])) {
           
$this->errormsg = 'Parameter file was not set!';
            return
false;
        }
        if (
trim($this->params['file']) == '') {
           
$this->errormsg = 'Parameter file is empty!';
            return
false;
        }
        if (!
file_exists($this->params['file'])) {
           
$this->errormsg = 'Import SQL file does not exist!';
            return
false;
        }
        if (
strtolower(substr(strrchr($this->params['file'], '.'), 1)) != 'sql') {
           
$this->errormsg = 'Import file is not an SQL file!';
            return
false;
        }

        if (isset(
$this->params['db_prefix']) && isset($this->params['db_prefix_old']) && ($this->params['db_prefix']) != $this->params['db_prefix_old']) {
           
$this->replacePrefixes = true;
        }

       
$templine = '';
       
$lines = file($this->params['file']);
        if (
$lines) {
            foreach (
$lines as $line) {
               
$trimmed_line = trim($line);
                if ((
$trimmed_line == '') || (substr($trimmed_line, 0, 2) == '--')) { continue; }
               
$templine .= $line;
                if (
substr($trimmed_line, -1, 1) == ';') {
                    if (
$this->replacePrefixes) {
                       
$templine = $this->replaceTblPrefix($templine, $this->params['db_prefix_old'], $this->params['db_prefix']);
                    }
                    if (!
$this->db2->exec($templine, '')) {
                       
$this->error = true;
                       
$this->errormsg = $this->db2->getErrorMsg();
                        if (
$this->errormsg == '') {
                           
$this->errormsg = 'An SQL query failed to be executed!';
                        }
                       
$this->disconnect();
                        return
false;
                    }
                   
$this->queries++;
                   
$templine = '';
                }
            }
        }
        return
true;
    }


   
/**************************/
    /* REPLACE TABLE PREFIXES */
    /**************************/
   
private function replaceTblPrefix($sql, $oldprf, $newprf) {
        if (
$oldprf == $newprf) { return $sql; }
       
$sql = str_replace('DROP TABLE "'.$oldprf, 'DROP TABLE "'.$newprf, $sql);
       
$sql = str_replace('DROP TABLE '.$oldprf, 'DROP TABLE '.$newprf, $sql);
       
$sql = str_replace('DROP TABLE IF EXISTS "'.$oldprf, 'DROP TABLE IF EXISTS "'.$newprf, $sql);
       
$sql = str_replace('DROP TABLE IF EXISTS '.$oldprf, 'DROP TABLE IF EXISTS '.$newprf, $sql);
       
$sql = str_replace('CREATE TABLE "'.$oldprf, 'CREATE TABLE "'.$newprf, $sql);
       
$sql = str_replace('CREATE TABLE '.$oldprf, 'CREATE TABLE '.$newprf, $sql);
       
$sql = str_replace('CREATE INDEX "'.$oldprf, 'CREATE INDEX "'.$newprf, $sql);
       
$sql = str_replace('CREATE INDEX '.$oldprf, 'CREATE INDEX '.$newprf, $sql);
       
$sql = str_replace(' ON "'.$oldprf, ' ON "'.$newprf, $sql);
       
$sql = str_replace('INSERT INTO "'.$oldprf, 'INSERT INTO "'.$newprf, $sql);
       
$sql = str_replace('INSERT INTO '.$oldprf, 'INSERT INTO '.$newprf, $sql);
       
$sql = str_replace(' FROM "'.$oldprf, ' FROM "'.$newprf, $sql);
        if (
strpos($sql, 'SELECT setval') !== false) {
           
$sql = str_replace($oldprf, $newprf, $sql);
        }
        return
$sql;
    }


   
/************************/
    /* EXECUTE AN SQL QUERY */
    /************************/
   
public function query($sql) {
        if (
$this->error) { return false; }
        if (!
$this->db2) {
           
$this->errormsg = 'Database connection is closed!';
            return
false;
        }
        if (
trim($sql) == '') {
           
$this->errormsg = 'The SQL query is empty!';
            return
false;
        }

        if (!
$this->db2->exec($sql, '')) {
           
$this->errormsg = $this->db2->getErrorMsg();
            if (
$this->errormsg == '') {
               
$this->errormsg = 'SQL query failed to be executed!';
            }
            return
false;
        }

        return
true;
    }

}

?>