BF [ 1964496 ] AccessSqlParser is not parsing well JOIN CLAUSE
* AccessSqlParserTest: don't invoke Adempiere.startup() on setUp() because is not needed * organized imports
This commit is contained in:
parent
452c495ab5
commit
1e80c340be
|
@ -16,21 +16,22 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package org.compiere.model;
|
package org.compiere.model;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.StringTokenizer;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import java.util.logging.*;
|
import org.compiere.util.CLogMgt;
|
||||||
import org.compiere.util.*;
|
import org.compiere.util.CLogger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse FROM in SQL WHERE clause
|
* Parse FROM in SQL WHERE clause
|
||||||
* <p>
|
|
||||||
* Change log:
|
|
||||||
* <ul>
|
|
||||||
* <li>2007-02-10 - teo_sarca - [ 1652623 ] AccessSqlParser.getTableInfo(String) - tablename parsing bug
|
|
||||||
* </ul>
|
|
||||||
*
|
*
|
||||||
* @author Jorg Janke
|
* @author Jorg Janke
|
||||||
* @version $Id: AccessSqlParser.java,v 1.3 2006/07/30 00:58:36 jjanke Exp $
|
* @version $Id: AccessSqlParser.java,v 1.3 2006/07/30 00:58:36 jjanke Exp $
|
||||||
|
*
|
||||||
|
* @author Teo Sarca, SC ARHIPAC SERVICE SRL
|
||||||
|
* <li>BF [ 1652623 ] AccessSqlParser.getTableInfo(String) - tablename parsing bug
|
||||||
|
* <li>BF [ 1964496 ] AccessSqlParser is not parsing well JOIN CLAUSE
|
||||||
*/
|
*/
|
||||||
public class AccessSqlParser
|
public class AccessSqlParser
|
||||||
{
|
{
|
||||||
|
@ -226,12 +227,12 @@ public class AccessSqlParser
|
||||||
int index = from.lastIndexOf(WHERE); // end at where
|
int index = from.lastIndexOf(WHERE); // end at where
|
||||||
if (index != -1)
|
if (index != -1)
|
||||||
from = from.substring(0, index);
|
from = from.substring(0, index);
|
||||||
from = Util.replace(from, " AS ", " ");
|
from = from.replaceAll("[\r\n\t ]+AS[\r\n\t ]+", " ");
|
||||||
from = Util.replace(from, " as ", " ");
|
from = from.replaceAll("[\r\n\t ]+as[\r\n\t ]+", " ");
|
||||||
from = Util.replace(from, " INNER JOIN ", ", ");
|
from = from.replaceAll("[\r\n\t ]+INNER[\r\n\t ]+JOIN[\r\n\t ]+", ", ");
|
||||||
from = Util.replace(from, " LEFT OUTER JOIN ", ", ");
|
from = from.replaceAll("[\r\n\t ]+LEFT[\r\n\t ]+OUTER[\r\n\t ]+JOIN[\r\n\t ]+", ", ");
|
||||||
from = Util.replace(from, " RIGHT OUTER JOIN ", ", ");
|
from = from.replaceAll("[\r\n\t ]+RIGHT[\r\n\t ]+OUTER[\r\n\t ]+JOIN[\r\n\t ]+", ", ");
|
||||||
from = Util.replace(from, " FULL JOIN ", ", ");
|
from = from.replaceAll("[\r\n\t ]+FULL[\r\n\t ]+JOIN[\r\n\t ]+", ", ");
|
||||||
// Remove ON clause - assumes that there is no IN () in the clause
|
// Remove ON clause - assumes that there is no IN () in the clause
|
||||||
index = from.indexOf(ON);
|
index = from.indexOf(ON);
|
||||||
while (index != -1)
|
while (index != -1)
|
||||||
|
|
|
@ -16,8 +16,7 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package org.compiere.model;
|
package org.compiere.model;
|
||||||
|
|
||||||
import junit.framework.*;
|
import junit.framework.TestCase;
|
||||||
import org.compiere.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AccessSqlParserTest tests the class
|
* AccessSqlParserTest tests the class
|
||||||
|
@ -58,7 +57,7 @@ public class AccessSqlParserTest extends TestCase
|
||||||
protected void setUp() throws Exception
|
protected void setUp() throws Exception
|
||||||
{
|
{
|
||||||
super.setUp();
|
super.setUp();
|
||||||
Adempiere.startup(true);
|
// Adempiere.startup(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -210,10 +209,13 @@ public class AccessSqlParserTest extends TestCase
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* teo_sarca - [ 1652623 ] AccessSqlParser.getTableInfo(String) - tablename parsing bug
|
* <li>teo_sarca - [ 1652623 ] AccessSqlParser.getTableInfo(String) - tablename parsing bug
|
||||||
|
* <li>teo_sarca - [ 1964496 ] AccessSqlParser is not parsing well JOIN CLAUSE
|
||||||
*/
|
*/
|
||||||
public void testTableNameParsing()
|
public void testTableNameParsing()
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
// BF [ 1652623 ] AccessSqlParser.getTableInfo(String) - tablename parsing bug
|
||||||
String sql =
|
String sql =
|
||||||
"SELECT SUM(il.QtyInvoiced)\n"
|
"SELECT SUM(il.QtyInvoiced)\n"
|
||||||
+ "FROM RV_C_Invoice\n"
|
+ "FROM RV_C_Invoice\n"
|
||||||
|
@ -221,7 +223,15 @@ public class AccessSqlParserTest extends TestCase
|
||||||
+ "INNER JOIN RV_C_InvoiceLine il ON (C_Invoice.C_Invoice_ID=il.C_Invoice_ID) WHERE\n"
|
+ "INNER JOIN RV_C_InvoiceLine il ON (C_Invoice.C_Invoice_ID=il.C_Invoice_ID) WHERE\n"
|
||||||
+ "C_Invoice.IsSOTrx='Y' AND C_Invoice.Processed='Y' AND C_Invoice.IsPaid='Y'";
|
+ "C_Invoice.IsSOTrx='Y' AND C_Invoice.Processed='Y' AND C_Invoice.IsPaid='Y'";
|
||||||
AccessSqlParser fixture = new AccessSqlParser(sql);
|
AccessSqlParser fixture = new AccessSqlParser(sql);
|
||||||
assertEquals("AccessSqlParser[RV_C_Invoice=C_Invoice|0]", fixture.toString());
|
assertEquals("AccessSqlParser[RV_C_Invoice=C_Invoice,RV_C_InvoiceLine=il|0]", fixture.toString());
|
||||||
|
//
|
||||||
|
// BF [ 1964496 ] AccessSqlParser is not parsing well JOIN CLAUSE
|
||||||
|
sql =
|
||||||
|
"SELECT C_Invoice.* FROM C_Invoice\n"
|
||||||
|
+"INNER JOIN C_BPartner bp ON (bp.C_BPartner_ID=C_Invoice.C_BPartner_ID) WHERE 1=0";
|
||||||
|
;
|
||||||
|
fixture = new AccessSqlParser(sql);
|
||||||
|
assertEquals("AccessSqlParser[C_Invoice,C_BPartner=bp|0]", fixture.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue