IDEMPIERE-4289 Implement Support for JUnit5 Unit Testing (#262)

Move the old Convert_PostgreSQLTest to the new structure
This commit is contained in:
Carlos Ruiz 2020-09-18 12:17:40 +02:00 committed by GitHub
parent d3c9804253
commit 703ce7bda8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 121 additions and 266 deletions

View File

@ -10,9 +10,7 @@ Bundle-ClassPath: .,
lib/postgresql.jar
Require-Bundle: org.adempiere.base;bundle-version="0.0.0",
org.adempiere.install;bundle-version="0.0.0"
Import-Package: junit.framework;version="3.8.2",
org.junit;version="4.8.1",
org.osgi.framework,
Import-Package: org.osgi.framework,
org.slf4j;version="1.7.2"
Bundle-ActivationPolicy: lazy
Bundle-Activator: org.adempiere.db.postgresql.PostgreSQLBundleActivator

View File

@ -1,171 +0,0 @@
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.dbPort;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import org.compiere.Adempiere;
import org.compiere.util.CLogMgt;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.Env;
import org.compiere.util.Ini;
import org.compiere.util.Login;
/**
* Order Test Example
*
* @author Jorg Janke
* @version $Id: PostgresConvertTest.java,v 1.2 2005/03/11 20:30:16 jjanke Exp $
*/
public class PostgresConvertTest
{
/**
* PostgresConvertTest
*/
public PostgresConvertTest ()
{
} // PostgresConvertTest
/** Logger */
private static final CLogger log = CLogger.getCLogger (PostgresConvertTest.class);
/**
* Test
* @param args ignored
*/
public static void main (String[] args)
{
Adempiere.startup(true);
CLogMgt.setLoggerLevel(Level.INFO, null);
CLogMgt.setLevel(Level.INFO);
//
Ini.setProperty(Ini.P_UID,"SuperUser");
Ini.setProperty(Ini.P_PWD,"System");
Ini.setProperty(Ini.P_ROLE,"GardenWorld Admin");
Ini.setProperty(Ini.P_CLIENT, "GardenWorld");
Ini.setProperty(Ini.P_ORG,"HQ");
Ini.setProperty(Ini.P_WAREHOUSE,"HQ Warehouse");
Ini.setProperty(Ini.P_LANGUAGE,"English");
Login login = new Login(Env.getCtx());
if (!login.batchLogin(null))
System.exit(1);
log.info("start test");
StringBuilder sql = new StringBuilder (
"SELECT 'un DATE en una constante'," +
" 'ropa de cache para damas' FROM DUAL");
try
{
PreparedStatement pstmt = DB.prepareStatement(sql.toString(), null);
@SuppressWarnings("unused")
ResultSet rs = pstmt.executeQuery();
}
catch(SQLException e)
{
log.log(Level.SEVERE, sql.toString(), e);
}
// From org.compiere.acct.Doc_Order
// update Product PO info
// should only be once, but here for every AcctSchema
// ignores multiple lines with same product - just uses first
/*sql = new StringBuffer (
"UPDATE M_Product_PO po "
+ "SET PriceLastPO = (SELECT currencyConvert(ol.PriceActual,ol.C_Currency_ID,po.C_Currency_ID,o.DateOrdered,o.C_ConversionType_ID,o.AD_Client_ID,o.AD_Org_ID) "
+ "FROM C_Order o, C_OrderLine ol "
+ "WHERE o.C_Order_ID=ol.C_Order_ID"
+ " AND po.M_Product_ID=ol.M_Product_ID AND po.C_BPartner_ID=o.C_BPartner_ID"
+ " AND ROWNUM=1 AND o.C_Order_ID=").append(getRecord_ID()).append(") ")
.append("WHERE EXISTS (SELECT * "
+ "FROM C_Order o, C_OrderLine ol "
+ "WHERE o.C_Order_ID=ol.C_Order_ID"
+ " AND po.M_Product_ID=ol.M_Product_ID AND po.C_BPartner_ID=o.C_BPartner_ID"
+ " AND o.C_Order_ID=").append(getRecord_ID()).append(")");
int no = DB.executeUpdate(sql.toString(), getTrxName());
log.fine("M_Product_PO - Updated=" + no);
*/
//sql = new StringBuffer ("DELETE T_MRP WHERE AD_Client_ID<>0");
//no = DB.executeUpdate(sql.toString(), getTrxName());
/*
// From org.compiere.acct.Doc_Invoice
// update Product PO info
// should only be once, but here for every AcctSchema
// ignores multiple lines with same product - just uses first
StringBuffer sql = new StringBuffer (
"UPDATE M_Product_PO po "
+ "SET PriceLastInv = "
// select
+ "(SELECT currencyConvert(il.PriceActual,i.C_Currency_ID,po.C_Currency_ID,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID) "
+ "FROM C_Invoice i, C_InvoiceLine il "
+ "WHERE i.C_Invoice_ID=il.C_Invoice_ID"
+ " AND po.M_Product_ID=il.M_Product_ID AND po.C_BPartner_ID=i.C_BPartner_ID"
+ " AND ROWNUM=1 AND i.C_Invoice_ID=").append(getRecord_ID()).append(") ")
// update
.append("WHERE EXISTS (SELECT * "
+ "FROM C_Invoice i, C_InvoiceLine il "
+ "WHERE i.C_Invoice_ID=il.C_Invoice_ID"
+ " AND po.M_Product_ID=il.M_Product_ID AND po.C_BPartner_ID=i.C_BPartner_ID"
+ " AND i.C_Invoice_ID=").append(getRecord_ID()).append(")");
int no = DB.executeUpdate(sql.toString(), getTrxName());
log.fine("M_Product_PO - Updated=" + no);
*/
sql = new StringBuilder ("UPDATE I_Order SET M_Warehouse_ID=(SELECT M_Warehouse_ID FROM M_Warehouse w WHERE ROWNUM=1 AND I_Order.AD_Client_ID=w.AD_Client_ID AND I_Order.AD_Org_ID=w.AD_Org_ID) WHERE M_Warehouse_ID IS NULL AND I_IsImported<>'Y' AND AD_Client_ID=11");
@SuppressWarnings("unused")
int no = DB.executeUpdate(sql.toString(), getTrxName());
/*sql = new StringBuffer ("UPDATE I_Order o SET I_IsImported='E', I_ErrorMsg=I_ErrorMsg||'ERR=Invalid Org, ' WHERE (AD_Org_ID IS NULL OR AD_Org_ID=0 OR EXISTS (SELECT * FROM AD_Org oo WHERE o.AD_Org_ID=oo.AD_Org_ID AND (oo.IsSummary='Y' OR oo.IsActive='N'))) AND I_IsImported<>'Y'");
no = DB.executeUpdate(sql.toString(), getTrxName());
sql = new StringBuffer ("UPDATE I_Order o SET C_DocType_ID=(SELECT C_DocType_ID FROM C_DocType d WHERE d.Name=o.DocTypeName AND d.DocBaseType='POO' AND o.AD_Client_ID=d.AD_Client_ID) WHERE C_DocType_ID IS NULL AND IsSOTrx='N' AND DocTypeName IS NOT NULL AND I_IsImported<>'Y'");
no = DB.executeUpdate(sql.toString(), getTrxName());*/
sql = new StringBuilder ("UPDATE I_Order o SET (C_BPartner_ID,AD_User_ID)=(SELECT C_BPartner_ID,AD_User_ID FROM AD_User u WHERE o.ContactName=u.Name AND o.AD_Client_ID=u.AD_Client_ID AND u.C_BPartner_ID IS NOT NULL) WHERE C_BPartner_ID IS NULL AND ContactName IS NOT NULL AND EXISTS (SELECT Name FROM AD_User u WHERE o.ContactName=u.Name AND o.AD_Client_ID=u.AD_Client_ID AND u.C_BPartner_ID IS NOT NULL GROUP BY Name HAVING COUNT(*)=1) AND I_IsImported<>'Y' AND AD_Client_ID=11");
no = DB.executeUpdate(sql.toString(), getTrxName());
//sql = new StringBuffer ("SELECT M_PriceList_ID, pl.Name, pl.Description, pl.IsTaxIncluded, c.ISO_Code, c.CurSymbol, cc.AD_Language FROM M_PriceList pl INNER JOIN C_Currency c ON (pl.C_Currency_ID=c.C_Currency_ID) LEFT OUTER JOIN C_Country cc ON (c.C_Currency_ID=cc.C_Currency_ID AND ROWNUM=1) WHERE pl.IsActive='Y' AND pl.AD_Client_ID=? AND pl.M_PriceList_ID=100000");
//no = DB.executeUpdate(sql.toString(), getTrxName());
log.info("final test");
} // main
public static int getRecord_ID()
{
return 10000000;
} // getRecord_ID
protected static String getTrxName()
{
return "Test";
} // getTrxName
} // PostgresConvertTest

View File

@ -11,23 +11,28 @@
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.compiere.dbPort;
package org.idempiere.test.base;
import junit.framework.TestCase;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.compiere.util.DB;
import org.idempiere.test.AbstractTestCase;
import org.junit.jupiter.api.Test;
/**
* Unit testing for Convert_PostgreSQL.
* @author Low Heng Sin
* @version 20061225
*/
public final class Convert_PostgreSQLTest extends TestCase{
private Convert_PostgreSQL convert = new Convert_PostgreSQL();
public final class Convert_PostgreSQLTest extends AbstractTestCase {
//private Convert_PostgreSQL convert = new Convert_PostgreSQL();
String sql;
String sqe;
String[] r;
String r;
public Convert_PostgreSQLTest() {}
@Test
public void test1807657() {
sql = "UPDATE A_Asset a "
+ "SET (Name, Description)="
@ -44,9 +49,10 @@ public final class Convert_PostgreSQLTest extends TestCase{
+ "WHERE p.M_Product_ID=A_Asset.M_Product_ID "
+ "AND A_Asset.IsActive='Y' AND A_Asset.M_Product_ID=0";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void test1751966() {
sql = "UPDATE I_ReportLine i "
+ "SET (Description, SeqNo, IsSummary, IsPrinted, LineType, CalculationType, AmountType, PostingType)="
@ -70,11 +76,12 @@ public final class Convert_PostgreSQLTest extends TestCase{
+"ii.I_ReportLine_ID=(SELECT MIN(I_ReportLine_ID) FROM I_ReportLine iii "
+"WHERE I_ReportLine.Name=iii.Name AND I_ReportLine.PA_ReportLineSet_ID=iii.PA_ReportLineSet_ID)) "
+"AND I_ReportLine.I_IsImported='N' AND I_ReportLine.AD_Client_ID=0";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
//[ 1707959 ] Copy from other PrintFormat doesn't work anymore
@Test
public void test1707959() {
sql = "UPDATE AD_PrintFormatItem_Trl new " +
"SET (PrintName, PrintNameSuffix, IsTranslated) = (" +
@ -88,115 +95,121 @@ public final class Convert_PostgreSQLTest extends TestCase{
" WHERE old.AD_Language=new.AD_Language" +
" AND AD_PrintFormatItem_ID =2)";
sqe = "UPDATE AD_PrintFormatItem_Trl SET PrintName=\"old\".PrintName,PrintNameSuffix=\"old\".PrintNameSuffix,IsTranslated=\"old\".IsTranslated FROM AD_PrintFormatItem_Trl \"old\" WHERE \"old\".AD_Language=AD_PrintFormatItem_Trl.AD_Language AND \"old\".AD_PrintFormatItem_ID =0 AND AD_PrintFormatItem_Trl.AD_PrintFormatItem_ID=1 AND EXISTS (SELECT AD_PrintFormatItem_ID FROM AD_PrintFormatItem_trl \"old\" WHERE \"old\".AD_Language=AD_PrintFormatItem_Trl.AD_Language AND AD_PrintFormatItem_ID =2)";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
//[ 1707540 ] Dependency problem when modifying AD Columns and Sync.
//[ 1707611 ] Column synchronization for mandatory columns doesn't work
@Test
public void testAlterColumn() {
sql = "ALTER TABLE Test MODIFY T_Integer NUMBER(10) NOT NULL";
//sqe = "ALTER TABLE Test ALTER COLUMN T_Integer TYPE NUMERIC(10); ALTER TABLE Test ALTER COLUMN T_Integer SET NOT NULL;";
sqe = "INSERT INTO t_alter_column values('test','T_Integer','NUMERIC(10)','NOT NULL',null)";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
sql = "ALTER TABLE Test MODIFY T_Integer NUMBER(10) NULL";
//sqe = "ALTER TABLE Test ALTER COLUMN T_Integer TYPE NUMERIC(10); ALTER TABLE Test ALTER COLUMN T_Integer DROP NOT NULL;";
sqe = "INSERT INTO t_alter_column values('test','T_Integer','NUMERIC(10)','NULL',null)";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
sql = "ALTER TABLE Test MODIFY T_Integer NOT NULL";
sqe = "INSERT INTO t_alter_column values('test','T_Integer',null,'NOT NULL',null)";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
// Line 407 of ImportProduct.java
sql = "ALTER TABLE LPI_Publication MODIFY AD_Client_ID NUMERIC(10) DEFAULT NULL";
//sqe = "ALTER TABLE LPI_Publication ALTER COLUMN AD_Client_ID TYPE NUMERIC(10); ALTER TABLE LPI_Publication ALTER COLUMN AD_Client_ID SET DEFAULT NULL; ";
sqe = "INSERT INTO t_alter_column values('lpi_publication','AD_Client_ID','NUMERIC(10)',null,'NULL')";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
//add column with default fail in libero 2pack import
sql = "ALTER TABLE XX ADD A VARCHAR2(10) DEFAULT --";
sqe = "ALTER TABLE XX ADD COLUMN A VARCHAR(10) DEFAULT '--'";
r = convert.convert(sql);
assertEquals(sqe, r[0].trim());
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r.trim());
//[ adempiere-Bugs-1746266 ]
sql = "ALTER TABLE someTableName MODIFY someColumnName NVARCHAR2(64)";
sqe = "INSERT INTO t_alter_column values('sometablename','someColumnName','VARCHAR(64)',null,null)";
r = convert.convert(sql);
assertEquals(sqe, r[0].trim());
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r.trim());
sql = "ALTER TABLE S_Resource MODIFY IsActive CHAR(1) DEFAULT 'Y'";
sqe = "INSERT INTO t_alter_column values('s_resource','IsActive','CHAR(1)',null,'Y')";
r = convert.convert(sql);
assertEquals(sqe, r[0].trim());
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r.trim());
sql = "ALTER TABLE PP_Order_NodeNext MODIFY PP_Order_NodeNext_ID NULL";
sqe = "INSERT INTO t_alter_column values('pp_order_nodenext','PP_Order_NodeNext_ID',null,'NULL',null)";
r = convert.convert(sql);
assertEquals(sqe, r[0].trim());
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r.trim());
sql = "ALTER TABLE C_InvoiceTax ADD Created DATE DEFAULT SYSDATE NOT NULL";
sqe = "ALTER TABLE C_InvoiceTax ADD COLUMN Created TIMESTAMP DEFAULT statement_timestamp() NOT NULL";
r = convert.convert(sql);
assertEquals(sqe, r[0].trim());
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r.trim());
}
// Convert.recoverQuotedStrings() error on strings with "<-->" - teo_sarca [ 1705768 ]
// http://sourceforge.net/tracker/index.php?func=detail&aid=1705768&group_id=176962&atid=879332
@Test
public void test1705768() {
sql = "SELECT 'Partner <--> Organization', 's2\\$', 's3' FROM DUAL";
sqe = "SELECT 'Partner <--> Organization', E's2\\\\$', 's3'";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void test1704261() {
// [ 1704261 ] can not import currency rate
sql = "UPDATE I_Conversion_Rate i SET MultiplyRate = 1 / DivideRate WHERE (MultiplyRate IS NULL OR MultiplyRate = 0) AND DivideRate IS NOT NULL AND DivideRate<>0 AND I_IsImported<>'Y' AND AD_Client_ID=1000000";
sqe = "UPDATE I_Conversion_Rate SET MultiplyRate = 1 / DivideRate WHERE (MultiplyRate IS NULL OR MultiplyRate = 0) AND DivideRate IS NOT NULL AND DivideRate<>0 AND I_IsImported<>'Y' AND AD_Client_ID=1000000";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void testAlterTable() {
//[ 1668720 ] Convert failing in alter table
sql = "ALTER TABLE GT_TaxBase ADD CONSTRAINT GT_TaxBase_Key PRIMARY KEY (GT_TaxBase_ID)";
sqe = "ALTER TABLE GT_TaxBase ADD CONSTRAINT GT_TaxBase_Key PRIMARY KEY (GT_TaxBase_ID)";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
//[ 1668720 ] Convert failing in alter table
sql = "ALTER TABLE GT_TaxBase ADD GT_TaxBase_ID NUMBER(10) NOT NULL";
sqe = "ALTER TABLE GT_TaxBase ADD COLUMN GT_TaxBase_ID NUMERIC(10) NOT NULL";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void test1662983() {
//[ 1662983 ] Convert cutting backslash from string
sql = "SELECT 'C:\\Documentos\\Test' FROM DUAL";
sqe = "SELECT E'C:\\\\Documentos\\\\Test'";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
sql = "SELECT 'C:Document' FROM DUAL";
sqe = "SELECT 'C:Document'";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void testMultiColumnAssignment() {
// Line 407 of ImportProduct.java
sql = "UPDATE M_PRODUCT SET (Value,Name,Description,DocumentNote,Help,UPC,SKU,C_UOM_ID,M_Product_Category_ID,Classification,ProductType,Volume,Weight,ShelfWidth,ShelfHeight,ShelfDepth,UnitsPerPallet,Discontinued,DiscontinuedBy,Updated,UpdatedBy)= (SELECT Value,Name,Description,DocumentNote,Help,UPC,SKU,C_UOM_ID,M_Product_Category_ID,Classification,ProductType,Volume,Weight,ShelfWidth,ShelfHeight,ShelfDepth,UnitsPerPallet,Discontinued,DiscontinuedBy,SysDate,UpdatedBy FROM I_Product WHERE I_Product_ID=?) WHERE M_Product_ID=?";
sqe = "UPDATE M_PRODUCT SET Value=I_Product.Value,Name=I_Product.Name,Description=I_Product.Description,DocumentNote=I_Product.DocumentNote,Help=I_Product.Help,UPC=I_Product.UPC,SKU=I_Product.SKU,C_UOM_ID=I_Product.C_UOM_ID,M_Product_Category_ID=I_Product.M_Product_Category_ID,Classification=I_Product.Classification,ProductType=I_Product.ProductType,Volume=I_Product.Volume,Weight=I_Product.Weight,ShelfWidth=I_Product.ShelfWidth,ShelfHeight=I_Product.ShelfHeight,ShelfDepth=I_Product.ShelfDepth,UnitsPerPallet=I_Product.UnitsPerPallet,Discontinued=I_Product.Discontinued,DiscontinuedBy=I_Product.DiscontinuedBy,Updated=statement_timestamp(),UpdatedBy=I_Product.UpdatedBy FROM I_Product WHERE I_Product.I_Product_ID=? AND M_PRODUCT.M_Product_ID=?";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
//FinReport, test inner join in multi column update
sql = "UPDATE T_Report r SET (Name,Description)=("
@ -207,8 +220,8 @@ public final class Convert_PostgreSQLTest extends TestCase{
+ "WHERE r.Fact_Acct_ID=fa.Fact_Acct_ID) "
+ "WHERE Fact_Acct_ID <> 0 AND AD_PInstance_ID=0";
sqe = "UPDATE T_Report SET Name=e.Name,Description=fa.Description FROM Fact_Acct fa INNER JOIN AD_Table t ON (fa.AD_Table_ID=t.AD_Table_ID) INNER JOIN AD_Element e ON (t.TableName||'_ID'=e.ColumnName) WHERE T_Report.Fact_Acct_ID=fa.Fact_Acct_ID AND T_Report.Fact_Acct_ID <> 0 AND T_Report.AD_PInstance_ID=0";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
//https://sourceforge.net/forum/message.php?msg_id=4083672
sql=" UPDATE AD_COLUMN c"
@ -221,8 +234,8 @@ public final class Convert_PostgreSQLTest extends TestCase{
+" AND (c.ColumnName <> e.ColumnName OR c.Name <> e.Name "
+" OR NVL(c.Description,' ') <> NVL(e.Description,' ') OR NVL(c.Help,' ') <> NVL(e.Help,' ')))";
sqe = "UPDATE AD_COLUMN SET ColumnName=e.ColumnName,Name=e.Name,Description=e.Description,Help=e.Help, Updated = statement_timestamp() FROM AD_ELEMENT e WHERE AD_COLUMN.AD_Element_ID=e.AD_Element_ID AND EXISTS (SELECT 1 FROM AD_ELEMENT e WHERE AD_COLUMN.AD_Element_ID=e.AD_Element_ID AND (AD_COLUMN.ColumnName <> e.ColumnName OR AD_COLUMN.Name <> e.Name OR COALESCE(AD_COLUMN.Description,' ') <> COALESCE(e.Description,' ') OR COALESCE(AD_COLUMN.Help,' ') <> COALESCE(e.Help,' ')))";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
sql="UPDATE AD_WF_NODE n"
+" SET (Name, Description, Help) = (SELECT f.Name, f.Description, f.Help"
@ -233,19 +246,21 @@ public final class Convert_PostgreSQLTest extends TestCase{
+" WHERE f.AD_Process_ID=n.AD_Process_ID"
+" AND (f.Name <> n.Name OR NVL(f.Description,' ') <> NVL(n.Description,' ') OR NVL(f.Help,' ') <> NVL(n.Help,' ')))";
sqe = "UPDATE AD_WF_NODE SET Name=f.Name,Description=f.Description,Help=f.Help FROM AD_PROCESS f WHERE f.AD_Process_ID=AD_WF_NODE.AD_Process_ID AND AD_WF_NODE.IsCentrallyMaintained = 'Y' AND EXISTS (SELECT 1 FROM AD_PROCESS f WHERE f.AD_Process_ID=AD_WF_NODE.AD_Process_ID AND (f.Name <> AD_WF_NODE.Name OR COALESCE(f.Description,' ') <> COALESCE(AD_WF_NODE.Description,' ') OR COALESCE(f.Help,' ') <> COALESCE(AD_WF_NODE.Help,' ')))";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void testReservedWordInQuote() {
// test conversion of reserved words inside quotes
sql = "UPDATE AD_Message_Trl SET MsgText='{0} Linea(s) {1,number,#,##0.00} - Total: {2,number,#,##0.00}',MsgTip=NULL,Updated=TO_DATE('2007-01-12 21:44:31','YYYY-MM-DD HH24:MI:SS'),IsTranslated='Y' WHERE AD_Message_ID=828 AND AD_Language='es_MX'";
sqe = "UPDATE AD_Message_Trl SET MsgText='{0} Linea(s) {1,number,#,##0.00} - Total: {2,number,#,##0.00}',MsgTip=NULL,Updated=TO_TIMESTAMP('2007-01-12 21:44:31','YYYY-MM-DD HH24:MI:SS'),IsTranslated='Y' WHERE AD_Message_ID=828 AND AD_Language='es_MX'";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void test1580231() {
//financial report, bug [ 1580231 ]
sql = "UPDATE t_report"
@ -255,17 +270,18 @@ public final class Convert_PostgreSQLTest extends TestCase{
+ " WHERE record_id <> 0 " + " AND ad_pinstance_id = 1000024 "
+ " AND pa_reportline_id = 101 " + " AND fact_acct_id = 0 ";
sqe = "UPDATE t_report SET NAME=c_elementvalue.VALUE,description=c_elementvalue.NAME FROM c_elementvalue WHERE c_elementvalue.c_elementvalue_id = t_report.record_id AND t_report.record_id <> 0 AND t_report.ad_pinstance_id = 1000024 AND t_report.pa_reportline_id = 101 AND t_report.fact_acct_id = 0";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
/*
@Test
public void testRowNum() {
//test limit
sql = "UPDATE I_Order SET M_Warehouse_ID=(SELECT M_Warehouse_ID FROM M_Warehouse w WHERE ROWNUM=1 AND I_Order.AD_Client_ID=w.AD_Client_ID AND I_Order.AD_Org_ID=w.AD_Org_ID) WHERE M_Warehouse_ID IS NULL AND I_IsImported<>'Y' AND AD_Client_ID=11";
sqe = "UPDATE I_Order SET M_Warehouse_ID=(SELECT M_Warehouse_ID FROM M_Warehouse w WHERE I_Order.AD_Client_ID=w.AD_Client_ID AND I_Order.AD_Org_ID=w.AD_Org_ID LIMIT 1 ) WHERE M_Warehouse_ID IS NULL AND I_IsImported<>'Y' AND AD_Client_ID=11" ;
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
//Doc_Invoice
sql = "UPDATE M_Product_PO po "
@ -281,23 +297,25 @@ public final class Convert_PostgreSQLTest extends TestCase{
+ " AND po.M_Product_ID=il.M_Product_ID AND po.C_BPartner_ID=i.C_BPartner_ID"
+ " AND i.C_Invoice_ID=0)";
sqe = "UPDATE M_Product_PO SET PriceLastInv = (SELECT currencyConvert(il.PriceActual,i.C_Currency_ID,M_Product_PO.C_Currency_ID,i.DateInvoiced,i.C_ConversionType_ID,i.AD_Client_ID,i.AD_Org_ID) FROM C_Invoice i, C_InvoiceLine il WHERE i.C_Invoice_ID=il.C_Invoice_ID AND M_Product_PO.M_Product_ID=il.M_Product_ID AND M_Product_PO.C_BPartner_ID=i.C_BPartner_ID AND i.C_Invoice_ID=0 LIMIT 1 ) WHERE EXISTS (SELECT * FROM C_Invoice i, C_InvoiceLine il WHERE i.C_Invoice_ID=il.C_Invoice_ID AND M_Product_PO.M_Product_ID=il.M_Product_ID AND M_Product_PO.C_BPartner_ID=i.C_BPartner_ID AND i.C_Invoice_ID=0)";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
sql="UPDATE T_InventoryValue SET PricePO = (SELECT currencyConvert (po.PriceList,po.C_Currency_ID,T_InventoryValue.C_Currency_ID,T_InventoryValue.DateValue,null, po.AD_Client_ID,po.AD_Org_ID) FROM M_Product_PO po WHERE po.M_Product_ID=T_InventoryValue.M_Product_ID AND po.IsCurrentVendor='Y' AND RowNum=1), PriceList = (SELECT currencyConvert(pp.PriceList,pl.C_Currency_ID,T_InventoryValue.C_Currency_ID,T_InventoryValue.DateValue,null, pl.AD_Client_ID,pl.AD_Org_ID) FROM M_PriceList pl, M_PriceList_Version plv, M_ProductPrice pp WHERE pp.M_Product_ID=T_InventoryValue.M_Product_ID AND pp.M_PriceList_Version_ID=T_InventoryValue.M_PriceList_Version_ID AND pp.M_PriceList_Version_ID=plv.M_PriceList_Version_ID AND plv.M_PriceList_ID=pl.M_PriceList_ID), PriceStd = (SELECT currencyConvert(pp.PriceStd,pl.C_Currency_ID,T_InventoryValue.C_Currency_ID,T_InventoryValue.DateValue,null, pl.AD_Client_ID,pl.AD_Org_ID) FROM M_PriceList pl, M_PriceList_Version plv, M_ProductPrice pp WHERE pp.M_Product_ID=T_InventoryValue.M_Product_ID AND pp.M_PriceList_Version_ID=T_InventoryValue.M_PriceList_Version_ID AND pp.M_PriceList_Version_ID=plv.M_PriceList_Version_ID AND plv.M_PriceList_ID=pl.M_PriceList_ID), PriceLimit = (SELECT currencyConvert(pp.PriceLimit,pl.C_Currency_ID,T_InventoryValue.C_Currency_ID,T_InventoryValue.DateValue,null, pl.AD_Client_ID,pl.AD_Org_ID) FROM M_PriceList pl, M_PriceList_Version plv, M_ProductPrice pp WHERE pp.M_Product_ID=T_InventoryValue.M_Product_ID AND pp.M_PriceList_Version_ID=T_InventoryValue.M_PriceList_Version_ID AND pp.M_PriceList_Version_ID=plv.M_PriceList_Version_ID AND plv.M_PriceList_ID=pl.M_PriceList_ID)";
sqe = "UPDATE T_InventoryValue SET PricePO = (SELECT currencyConvert (po.PriceList,po.C_Currency_ID,T_InventoryValue.C_Currency_ID,T_InventoryValue.DateValue,null, po.AD_Client_ID,po.AD_Org_ID) FROM M_Product_PO po WHERE po.M_Product_ID=T_InventoryValue.M_Product_ID AND po.IsCurrentVendor='Y' LIMIT 1 ), PriceList = (SELECT currencyConvert(pp.PriceList,pl.C_Currency_ID,T_InventoryValue.C_Currency_ID,T_InventoryValue.DateValue,null, pl.AD_Client_ID,pl.AD_Org_ID) FROM M_PriceList pl, M_PriceList_Version plv, M_ProductPrice pp WHERE pp.M_Product_ID=T_InventoryValue.M_Product_ID AND pp.M_PriceList_Version_ID=T_InventoryValue.M_PriceList_Version_ID AND pp.M_PriceList_Version_ID=plv.M_PriceList_Version_ID AND plv.M_PriceList_ID=pl.M_PriceList_ID), PriceStd = (SELECT currencyConvert(pp.PriceStd,pl.C_Currency_ID,T_InventoryValue.C_Currency_ID,T_InventoryValue.DateValue,null, pl.AD_Client_ID,pl.AD_Org_ID) FROM M_PriceList pl, M_PriceList_Version plv, M_ProductPrice pp WHERE pp.M_Product_ID=T_InventoryValue.M_Product_ID AND pp.M_PriceList_Version_ID=T_InventoryValue.M_PriceList_Version_ID AND pp.M_PriceList_Version_ID=plv.M_PriceList_Version_ID AND plv.M_PriceList_ID=pl.M_PriceList_ID), PriceLimit = (SELECT currencyConvert(pp.PriceLimit,pl.C_Currency_ID,T_InventoryValue.C_Currency_ID,T_InventoryValue.DateValue,null, pl.AD_Client_ID,pl.AD_Org_ID) FROM M_PriceList pl, M_PriceList_Version plv, M_ProductPrice pp WHERE pp.M_Product_ID=T_InventoryValue.M_Product_ID AND pp.M_PriceList_Version_ID=T_InventoryValue.M_PriceList_Version_ID AND pp.M_PriceList_Version_ID=plv.M_PriceList_Version_ID AND plv.M_PriceList_ID=pl.M_PriceList_ID)";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}*/
@Test
public void testAliasInUpdate() {
//test alias and column list update
sql = "UPDATE I_Order o SET (C_BPartner_ID,AD_User_ID)=(SELECT C_BPartner_ID,AD_User_ID FROM AD_User u WHERE o.ContactName=u.Name AND o.AD_Client_ID=u.AD_Client_ID AND u.C_BPartner_ID IS NOT NULL) WHERE C_BPartner_ID IS NULL AND ContactName IS NOT NULL AND EXISTS (SELECT Name FROM AD_User u WHERE o.ContactName=u.Name AND o.AD_Client_ID=u.AD_Client_ID AND u.C_BPartner_ID IS NOT NULL GROUP BY Name HAVING COUNT(*)=1) AND I_IsImported<>'Y' AND AD_Client_ID=11";
sqe = "UPDATE I_Order SET C_BPartner_ID=u.C_BPartner_ID,AD_User_ID=u.AD_User_ID FROM AD_User u WHERE I_Order.ContactName=u.Name AND I_Order.AD_Client_ID=u.AD_Client_ID AND u.C_BPartner_ID IS NOT NULL AND I_Order.C_BPartner_ID IS NULL AND I_Order.ContactName IS NOT NULL AND EXISTS (SELECT Name FROM AD_User u WHERE I_Order.ContactName=u.Name AND I_Order.AD_Client_ID=u.AD_Client_ID AND u.C_BPartner_ID IS NOT NULL GROUP BY Name HAVING COUNT(*)=1) AND I_Order.I_IsImported<>'Y' AND I_Order.AD_Client_ID=11";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void test1580226() {
//from bug [ 1580226 ] - test alias and trunc
sql = "INSERT INTO Fact_Acct_Balance ab "
@ -334,18 +352,20 @@ public final class Convert_PostgreSQLTest extends TestCase{
+ " Account_ID, PostingType, M_Product_ID, C_BPartner_ID,"
+ " C_Project_ID, AD_OrgTrx_ID, C_SalesRegion_ID, C_Activity_ID,"
+ " C_Campaign_ID, C_LocTo_ID, C_LocFrom_ID, User1_ID, User2_ID, GL_Budget_ID";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void testTrunc() {
//From bug [ 1576358 ] and [ 1577055 ]
sql = "SELECT TRUNC(TO_DATE('2006-10-13','YYYY-MM-DD'),'Q') FROM DUAL";
sqe = "SELECT TRUNC(TO_TIMESTAMP('2006-10-13','YYYY-MM-DD'),'Q')";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void testSubQuery() {
//MLanguage.addTable
sql = "INSERT INTO " + "AD_Column_Trl"
@ -360,27 +380,29 @@ public final class Convert_PostgreSQLTest extends TestCase{
+ " FROM " + "AD_Column_Trl"
+ " WHERE AD_Language='" + "es_MX" + "')";
sqe = "INSERT INTO AD_Column_Trl(AD_Language,IsTranslated, AD_Client_ID,AD_Org_ID, Createdby,UpdatedBy, AD_Column_ID,Name) SELECT 'es_MX','N', AD_Client_ID,AD_Org_ID, 100,100, AD_Column_ID,Name FROM AD_Column WHERE AD_Column_ID NOT IN (SELECT AD_Column_ID FROM AD_Column_Trl WHERE AD_Language='es_MX')";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void test1622302() {
//MInOutLineMa bug [ 1622302 ]
sql = "DELETE FROM M_InOutLineMA ma WHERE EXISTS "
+ "(SELECT * FROM M_InOutLine l WHERE l.M_InOutLine_ID=ma.M_InOutLine_ID"
+ " AND M_InOut_ID=0)";
sqe = "DELETE FROM M_InOutLineMA WHERE EXISTS (SELECT * FROM M_InOutLine l WHERE l.M_InOutLine_ID=M_InOutLineMA.M_InOutLine_ID AND M_InOut_ID=0)";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void test1638046() {
//bug [ 1638046 ]
sql = "UPDATE GL_JournalBatch jb"
+ " SET (TotalDr, TotalCr) = (SELECT COALESCE(SUM(TotalDr),0), COALESCE(SUM(TotalCr),0)"
+ " FROM GL_Journal j WHERE j.IsActive='Y' AND jb.GL_JournalBatch_ID=j.GL_JournalBatch_ID) "
+ "WHERE GL_JournalBatch_ID=0";
r = convert.convert(sql);
r = DB.getDatabase().convertStatement(sql);
sqe = "UPDATE GL_JournalBatch SET TotalDr="
+ "( SELECT COALESCE(SUM(TotalDr),0) "
+ "FROM GL_Journal j WHERE j.IsActive='Y' AND "
@ -388,27 +410,29 @@ public final class Convert_PostgreSQLTest extends TestCase{
+ "TotalCr=( SELECT COALESCE(SUM(TotalCr),0) FROM GL_Journal j "
+ "WHERE j.IsActive='Y' AND GL_JournalBatch.GL_JournalBatch_ID=j.GL_JournalBatch_ID ) "
+ " WHERE GL_JournalBatch_ID=0";
assertEquals(sqe, r[0]);
assertEquals(sqe, r);
}
//[ 1727193 ] Convert failed with decode in quoted string
@Test
public void test1727193() {
sql = "UPDATE a set a.ten_decode = 'b'";
sqe = "UPDATE a set a.ten_decode = 'b'";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
sql = "UPDATE a set a.b = 'ten_decode'";
sqe = "UPDATE a set a.b = 'ten_decode'";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void testDecode() {
sql = "SELECT supplier_name, decode(supplier_id, 10000, 'IBM', 10001, 'Microsoft', 10002, 'Hewlett Packard', 'Gateway') FROM suppliers";
sqe = "SELECT supplier_name, CASE WHEN supplier_id=10000 THEN 'IBM' WHEN supplier_id=10001 THEN 'Microsoft' WHEN supplier_id=10002 THEN 'Hewlett Packard' ELSE 'Gateway' END FROM suppliers";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
//doc_matchinv update average cost, bug [ 1742835 ]
sql = "UPDATE M_Product_Costing "
@ -419,25 +443,27 @@ public final class Convert_PostgreSQLTest extends TestCase{
+ "SET CostAverage = CostAverageCumAmt/CASE WHEN CostAverageCumQty=0 THEN 1 ELSE CostAverageCumQty END "
+ "WHERE C_AcctSchema_ID=0"
+ " AND M_Product_ID=0";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
@Test
public void test2371805_GetDate() {
sql = "SELECT getdate() FROM DUAL";
sqe = "SELECT statement_timestamp()";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
sql = "SELECT SYSDATE FROM DUAL";
sqe = "SELECT statement_timestamp()";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
/**
* Test BF [ 1824256 ] Convert sql casts
*/
@Test
public void testCasts() {
String sql_begin = "SELECT ";
String[][] sql_tests = new String[][] {
@ -464,35 +490,37 @@ public final class Convert_PostgreSQLTest extends TestCase{
sql.append(sql_end);
sqle.append(sql_end);
//
String[] r = convert.convert(sql.toString());
assertEquals(sqle.toString(), r[0]);
r = DB.getDatabase().convertStatement(sql.toString());
assertEquals(sqle.toString(), r);
}
/**
* Test BF [ 2521586 ] Postgres conversion error
*/
@Test
public void test2521586() {
sql = "INSERT INTO M_Forecast (M_Forecast_ID) VALUES (1000000)";
sqe = "INSERT INTO M_Forecast (M_Forecast_ID) VALUES (1000000)";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
/**
* Test BF [3137355 ] PG query not valid when contains quotes and backslashes.
* https://sourceforge.net/tracker/?func=detail&aid=3137355&group_id=176962&atid=879332
*/
@Test
public void test3137355()
{
sql = "INSERT INTO MyTable (a, b, c, d, xml) VALUES ('val1', 'val2', 'this ''is'' a string with ''quotes'' and backslashes ''\\''', 'val4')";
sqe = "INSERT INTO MyTable (a, b, c, d, xml) VALUES ('val1', 'val2', E'this ''is'' a string with ''quotes'' and backslashes ''\\\\''', 'val4')";
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
sql = "SELECT AD_Tab.AD_Tab_ID,NULL,COALESCE(AD_Tab.Name,'-1') ||'_'|| COALESCE((SELECT COALESCE(AD_Window.Name,'') FROM AD_Window WHERE AD_Tab.AD_Window_ID=AD_Window.AD_Window_ID),'-1'),AD_Tab.IsActive"
+" FROM AD_Tab WHERE AD_Tab.AD_Tab_ID=?";
sqe = sql;
r = convert.convert(sql);
assertEquals(sqe, r[0]);
r = DB.getDatabase().convertStatement(sql);
assertEquals(sqe, r);
}
}
}