2
0
forked from Wavyzz/dolibarr

Enhancement for postgresql support

This commit is contained in:
Laurent Destailleur
2010-04-30 17:31:46 +00:00
parent 08f968d226
commit 054572fa12
10 changed files with 73 additions and 45 deletions

View File

@@ -71,7 +71,7 @@ if (isset($_POST["action"]) && $_POST["action"] == 'update' && empty($_POST["can
$file='init_menu_'.$key.'.sql';
if (file_exists($dir.$file))
{
$result=run_sql($dir.$file,1);
$result=run_sql($dir.$file,1,'',1);
}
}

View File

@@ -477,7 +477,7 @@ class DolibarrModules
{
if (preg_match('/\.sql$/i',$file) && ! preg_match('/\.key\.sql$/i',$file) && substr($file,0,4) == 'llx_' && substr($file,0,4) != 'data')
{
$result=run_sql($dir.$file,1);
$result=run_sql($dir.$file,1,'',1);
}
}
closedir($handle);
@@ -491,13 +491,13 @@ class DolibarrModules
{
if (preg_match('/\.key\.sql$/i',$file) && substr($file,0,4) == 'llx_' && substr($file,0,4) != 'data')
{
$result=run_sql($dir.$file,1);
$result=run_sql($dir.$file,1,'',1);
}
}
closedir($handle);
}
// Run .sql files
// Run data_xxx.sql files
$handle=@opendir($dir); // Dir may not exist
if ($handle)
{
@@ -505,7 +505,7 @@ class DolibarrModules
{
if (preg_match('/\.sql$/i',$file) && ! preg_match('/\.key\.sql$/i',$file) && substr($file,0,4) == 'data')
{
$result=run_sql($dir.$file,1);
$result=run_sql($dir.$file,1,'',1);
}
}
closedir($handle);

View File

@@ -186,7 +186,7 @@ if ($ok)
$name = substr($file, 0, strlen($file) - 4);
// Run sql script
$ok=run_sql($dir.$file, 0);
$ok=run_sql($dir.$file, 0, '', 1);
}
}

View File

@@ -320,7 +320,7 @@ if (! isset($_GET["action"]) || preg_match('/upgrade/i',$_GET["action"]))
$name = substr($file, 0, strlen($file) - 4);
// Run sql script
$ok=run_sql($dir.$file, 0);
$ok=run_sql($dir.$file, 0, '', 1);
}
}

View File

@@ -3196,7 +3196,7 @@ function migrate_reload_menu($db,$langs,$conf)
$file='init_menu_'.$key.'.sql';
if (file_exists($dir.$file))
{
$result=run_sql($dir.$file,1);
$result=run_sql($dir.$file,1,'',1);
}
}*/
}

View File

@@ -91,9 +91,12 @@ function versiondolibarrarray($fortest=0)
/**
* \brief Launch a sql file
* \param sqlfile Full path to sql file
* \param silent 1=Do not output anything, 0=Output line for update page
* \param entity Entity targeted for multicompany module
* \param usesavepoint 1=Run a savepoint before each request and a rollback to savepoint if error (this allow to have some request with errors inside global transactions).
* \return int <=0 if KO, >0 if OK
*/
function run_sql($sqlfile,$silent=1,$entity='')
function run_sql($sqlfile,$silent=1,$entity='',$usesavepoint=1)
{
global $db, $conf, $langs, $user;
@@ -153,7 +156,7 @@ function run_sql($sqlfile,$silent=1,$entity='')
}
// Loop on each request to see if there is a __+MAX_table__ key
$listofmaxrowid=array();
$listofmaxrowid=array(); // This is a cache table
foreach($arraysql as $i => $sql)
{
if ($sql)
@@ -224,7 +227,7 @@ function run_sql($sqlfile,$silent=1,$entity='')
dol_syslog('Admin.lib::run_sql New Request '.($i+1).' (replacing '.$from.' to '.$to.') sql='.$newsql, LOG_DEBUG);
}
$result=$db->query($newsql);
$result=$db->query($newsql,$usesavepoint);
if ($result)
{
if (preg_replace('/insert into ([^\s]+)/i',$newsql,$reg))

View File

@@ -309,10 +309,11 @@ class DoliDb
/**
* \brief Effectue une requete et renvoi le resultset de reponse de la base
* \param query Contenu de la query
* \return resource Resultset de la reponse
* \param query SQL query string
* \param usesavepoint 0=Default mode, 1=Run a savepoint before and a rollbock to savepoint if error (this allow to have some request with errors inside global transactions).
* \return resource Resultset of answer
*/
function query($query)
function query($query,$usesavepoint=0)
{
$query = trim($query);
@@ -782,11 +783,12 @@ class DoliDb
}
/**
\brief Liste des tables dans une database.
\param database Nom de la database
\return resource
* \brief List tables into a database.
* \param database Name of database
* \param table Filter on some tables
* \return array Array list of tables
*/
function DDLListTables($database)
function DDLListTables($database,$table='')
{
$this->results = mssql_list_tables($database, $this->db);
return $this->results;
@@ -970,7 +972,7 @@ class DoliDb
}
return $liste;
*/
return ''; // attente d<EFBFBD>buggage
return ''; // attente debuggage
}
function getDefaultCollationDatabase()

View File

@@ -354,11 +354,13 @@ class DoliDb
}
/**
* \brief Effectue une requete et renvoi le resultset de reponse de la base
* \param query Contenu de la query
* \return resource Resultset de la reponse
* \brief Execute a SQL request and return the resultset
* \param query SQL query string
* \param usesavepoint 0=Default mode, 1=Run a savepoint before and a rollbock to savepoint if error (this allow to have some request with errors inside global transactions).
* Note that with Mysql, this parameter is not used as Myssql can already commit a transaction even if one request is in error, without using savepoints.
* \return resource Resultset of answer
*/
function query($query)
function query($query,$usesavepoint=0)
{
$query = trim($query);
@@ -800,10 +802,10 @@ class DoliDb
}
/**
* \brief Liste des tables dans une database.
* \param database Nom de la database
* \param table Filtre sur tables a rechercher
* \return array Tableau des tables de la base
* \brief List tables into a database.
* \param database Name of database
* \param table Filter on some tables
* \return array Array list of tables
*/
function DDLListTables($database, $table='')
{

View File

@@ -361,11 +361,13 @@ class DoliDb
}
/**
* \brief Effectue une requete et renvoi le resultset de reponse de la base
* \param query Contenu de la query
* \return resource Resultset de la reponse
* \brief Execute a SQL request and return the resultset
* \param query SQL query string
* \param usesavepoint 0=Default mode, 1=Run a savepoint before and a rollbock to savepoint if error (this allow to have some request with errors inside global transactions).
* Note that with Mysql, this parameter is not used as Myssql can already commit a transaction even if one request is in error, without using savepoints.
* \return resource Resultset of answer
*/
function query($query)
function query($query,$usesavepoint=0)
{
$query = trim($query);
if (! $this->database_name)
@@ -811,10 +813,10 @@ class DoliDb
}
/**
* \brief Liste des tables dans une database.
* \param database Nom de la database
* \param table Filtre sur tables a rechercher
* \return array Tableau des tables de la base
* \brief List tables into a database.
* \param database Name of database
* \param table Filter on some tables
* \return array Array list of tables
*/
function DDLListTables($database, $table='')
{

View File

@@ -455,10 +455,11 @@ class DoliDb
/**
* \brief Convert request to PostgreSQL syntax, execute it and return the resultset
* \param query query string
* \param query SQL query string
* \param usesavepoint 0=Default mode, 1=Run a savepoint before and a rollbock to savepoint if error (this allow to have some request with errors inside global transactions).
* \return resource Resultset of answer
*/
function query($query)
function query($query,$usesavepoint=0)
{
$query = trim($query);
@@ -478,6 +479,11 @@ class DoliDb
else $loop=false;
}
if ($usesavepoint)
{
@pg_query($this->db, 'SAVEPOINT mysavepoint');
}
$ret = @pg_query($this->db, $query);
//print $query;
if (! preg_match("/^COMMIT/i",$query) && ! preg_match("/^ROLLBACK/i",$query))
@@ -490,6 +496,11 @@ class DoliDb
$this->lasterrno = $this->errno();
//print "\n>> ".$query."<br>\n";
//print '>> '.$this->lasterrno.' - '.$this->lasterror.' - '.$this->lastqueryerror."<br>\n";
if ($usesavepoint)
{
@pg_query($this->db, 'ROLLBACK TO SAVEPOINT mysavepoint');
}
}
$this->lastquery=$query;
$this->results = $ret;
@@ -882,10 +893,18 @@ class DoliDb
* \param database Nom de la database
* \return resource
*/
function DDLListTables($database)
function DDLListTables($database, $table='')
{
$this->results = pg_query($this->db, "SHOW TABLES");
return $this->results;
$listtables=array();
$like = '';
if ($table) $like = " AND table_name LIKE '".$table."'";
$result = pg_query($this->db, "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'".$like);
while($row = $this->fetch_row($result))
{
$listtables[] = $row[0];
}
return $listtables;
}
/**