2012-05-13 14:30:11 +02:00
< ? php
/* Copyright ( C ) 2010 Laurent Destailleur < eldy @ users . sourceforge . net >
2023-05-07 14:31:35 +02:00
* Copyright ( C ) 2023 Alexandre Janniaux < alexandre . janniaux @ gmail . com >
2024-11-14 00:16:43 +01:00
* Copyright ( C ) 2024 Frédéric France < frederic . france @ free . fr >
2012-05-13 14:30:11 +02:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2012-05-13 14:30:11 +02:00
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
* or see https :// www . gnu . org /
2012-05-13 14:30:11 +02:00
*/
/**
* \file test / phpunit / PgsqlTest . php
* \ingroup test
* \brief PHPUnit test
* \remarks To run this script as CLI : phpunit filename . php
*/
global $conf , $user , $langs , $db ;
//define('TEST_DB_FORCE_TYPE','mysql'); // This is to force using mysql driver
2014-05-01 19:57:53 +02:00
//require_once 'PHPUnit/Autoload.php';
2012-05-13 14:30:11 +02:00
require_once dirname ( __FILE__ ) . '/../../htdocs/master.inc.php' ;
2012-05-14 14:06:27 +02:00
require_once dirname ( __FILE__ ) . '/../../htdocs/core/db/pgsql.class.php' ;
2024-02-16 23:26:32 +01:00
require_once dirname ( __FILE__ ) . '/CommonClassTest.class.php' ;
2012-05-13 14:30:11 +02:00
$langs -> load ( " dict " );
2021-01-14 15:09:08 +01:00
if ( empty ( $user -> id )) {
2012-05-13 14:30:11 +02:00
print " Load permissions for admin user nb 1 \n " ;
$user -> fetch ( 1 );
2024-11-14 00:16:43 +01:00
$user -> loadRights ();
2012-05-13 14:30:11 +02:00
}
2024-02-19 15:28:21 +01:00
$conf -> global -> MAIN_DISABLE_ALL_MAILS = 1 ;
2012-05-13 14:30:11 +02:00
/**
* Class for PHPUnit tests
*
* @ backupGlobals disabled
* @ backupStaticAttributes enabled
* @ remarks backupGlobals must be disabled to have db , conf , user and lang not erased .
*/
2024-02-16 23:26:32 +01:00
class PgsqlTest extends CommonClassTest
2012-05-13 14:30:11 +02:00
{
2021-01-14 15:09:08 +01:00
/**
* testConvertSQLFromMysql
*
* @ return int
*/
public function testConvertSQLFromMysql ()
{
global $conf , $user , $langs , $db ;
2024-02-19 15:28:21 +01:00
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2012-05-13 14:30:11 +02:00
2023-08-04 17:26:38 +02:00
// Create a dummy db handler for pgsql
$tmpdb = new DoliDBPgsql ( 'pqsql' , 'host' , 'user' , 'pass' );
2023-06-26 23:02:17 +02:00
/*
$sql = " CREATE SEQUENCE __DATABASE__.llx_c_paiement_id_seq OWNED BY llx_c_paiement.id; " ;
2023-08-04 17:26:38 +02:00
$result = $tmpdb -> convertSQLFromMysql ( $sql );
2023-06-26 23:02:17 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( $result , " CREATE SEQUENCE __DATABASE__.llx_c_paiement_id_seq OWNED BY llx_c_paiement.id; " );
*/
2023-06-26 19:31:31 +02:00
$sql = " ALTER TABLE llx_bank_account MODIFY COLUMN state_id integer USING state_id::integer; " ;
2024-02-19 15:28:21 +01:00
$result = $tmpdb -> convertSQLFromMysql ( $sql );
2023-06-26 19:31:31 +02:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( $result , " -- ALTER TABLE llx_bank_account MODIFY COLUMN state_id integer USING state_id::integer; replaced by -- \n ALTER TABLE llx_bank_account ALTER COLUMN state_id TYPE integer USING state_id::integer; " );
2024-02-19 15:28:21 +01:00
$sql = " ALTER TABLE llx_table RENAME TO llx_table_new; " ;
$result = $tmpdb -> convertSQLFromMysql ( $sql );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( $result , " ALTER TABLE llx_table RENAME TO llx_table_new; " );
2012-05-13 14:30:11 +02:00
2024-02-19 15:28:21 +01:00
$sql = " ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0' AFTER existingcol; " ;
$result = $tmpdb -> convertSQLFromMysql ( $sql );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( $result , " ALTER TABLE llx_table ADD COLUMN newcol varchar(60) NOT NULL DEFAULT '0'; " );
2012-05-13 14:30:11 +02:00
2024-02-19 15:28:21 +01:00
$sql = " ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60); " ;
$result = $tmpdb -> convertSQLFromMysql ( $sql );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( $result , " -- ALTER TABLE llx_table CHANGE COLUMN oldname newname varchar(60); replaced by -- \n ALTER TABLE llx_table RENAME COLUMN oldname TO newname " );
2012-05-13 14:30:11 +02:00
2024-02-19 15:28:21 +01:00
$sql = " ALTER TABLE llx_table DROP COLUMN oldname; " ;
$result = $tmpdb -> convertSQLFromMysql ( $sql );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( $result , $sql );
2012-05-13 14:30:11 +02:00
2024-02-19 15:28:21 +01:00
$sql = " ALTER TABLE llx_table MODIFY name varchar(60); " ;
$result = $tmpdb -> convertSQLFromMysql ( $sql );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( $result , " -- ALTER TABLE llx_table MODIFY name varchar(60); replaced by -- \n ALTER TABLE llx_table ALTER COLUMN name TYPE varchar(60); " );
2012-05-13 14:30:11 +02:00
2021-01-14 15:09:08 +01:00
// Create a constraint
2024-02-19 15:28:21 +01:00
$sql = 'ALTER TABLE llx_tablechild ADD CONSTRAINT fk_tablechild_fk_fieldparent FOREIGN KEY (fk_fieldparent) REFERENCES llx_tableparent (rowid)' ;
$result = $tmpdb -> convertSQLFromMysql ( $sql );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( $result , $sql . ' DEFERRABLE INITIALLY IMMEDIATE;' );
2012-05-13 14:30:11 +02:00
2021-01-14 15:09:08 +01:00
// Test GROUP_CONCAT (without SEPARATOR)
2024-02-19 15:28:21 +01:00
$sql = " SELECT a.b, GROUP_CONCAT(a.c) FROM table GROUP BY a.b " ;
$result = $tmpdb -> convertSQLFromMysql ( $sql );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( $result , " SELECT a.b, STRING_AGG(a.c, ',') FROM table GROUP BY a.b " , 'Test GROUP_CONCAT (without SEPARATOR)' );
2018-09-02 14:10:06 +02:00
2021-01-14 15:09:08 +01:00
// Test GROUP_CONCAT (with SEPARATOR)
2024-02-19 15:28:21 +01:00
$sql = " SELECT a.b, GROUP_CONCAT(a.c SEPARATOR ',') FROM table GROUP BY a.b " ;
$result = $tmpdb -> convertSQLFromMysql ( $sql );
2021-01-14 15:09:08 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( $result , " SELECT a.b, STRING_AGG(a.c, ',') FROM table GROUP BY a.b " , 'Test GROUP_CONCAT (with SEPARATOR)' );
2018-09-02 14:10:06 +02:00
2021-01-14 15:09:08 +01:00
return $result ;
}
2012-05-13 14:30:11 +02:00
}