[ 1742835 ] Problem in Doc_MatchInv DECODE Function
This commit is contained in:
parent
6ceff048ba
commit
4e12c0ec76
|
@ -15,11 +15,9 @@ package org.compiere.dbPort;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
|
@ -791,51 +789,6 @@ public class Convert_PostgreSQL extends Convert_SQL92 {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isOperator(char c)
|
|
||||||
{
|
|
||||||
if ('=' == c)
|
|
||||||
return true;
|
|
||||||
else if ('<' == c)
|
|
||||||
return true;
|
|
||||||
else if ('>' == c)
|
|
||||||
return true;
|
|
||||||
else if ('|' == c)
|
|
||||||
return true;
|
|
||||||
else if ('(' == c)
|
|
||||||
return true;
|
|
||||||
else if (')' == c)
|
|
||||||
return true;
|
|
||||||
else if ('+' == c)
|
|
||||||
return true;
|
|
||||||
else if ('-' == c)
|
|
||||||
return true;
|
|
||||||
else if ('*' == c)
|
|
||||||
return true;
|
|
||||||
else if ('/' == c)
|
|
||||||
return true;
|
|
||||||
else if ('!' == c)
|
|
||||||
return true;
|
|
||||||
else if (',' == c)
|
|
||||||
return true;
|
|
||||||
else if ('?' == c)
|
|
||||||
return true;
|
|
||||||
else if ('#' == c)
|
|
||||||
return true;
|
|
||||||
else if ('@' == c)
|
|
||||||
return true;
|
|
||||||
else if ('~' == c)
|
|
||||||
return true;
|
|
||||||
else if ('&' == c)
|
|
||||||
return true;
|
|
||||||
else if ('^' == c)
|
|
||||||
return true;
|
|
||||||
else if ('!' == c)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if token is a valid sql identifier
|
* Check if token is a valid sql identifier
|
||||||
* @param token
|
* @param token
|
||||||
|
|
|
@ -336,5 +336,17 @@ public final class Convert_PostgreSQLTest extends TestCase{
|
||||||
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";
|
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);
|
r = convert.convert(sql);
|
||||||
assertEquals(sqe, r[0]);
|
assertEquals(sqe, r[0]);
|
||||||
|
|
||||||
|
//doc_matchinv update average cost, bug [ 1742835 ]
|
||||||
|
sql = "UPDATE M_Product_Costing "
|
||||||
|
+ "SET CostAverage = CostAverageCumAmt/DECODE(CostAverageCumQty, 0,1, CostAverageCumQty) "
|
||||||
|
+ "WHERE C_AcctSchema_ID=0"
|
||||||
|
+ " AND M_Product_ID=0";
|
||||||
|
sqe = "UPDATE M_Product_Costing "
|
||||||
|
+ "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]);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -339,7 +339,8 @@ public abstract class Convert_SQL92 extends Convert {
|
||||||
int index = statement.toUpperCase().indexOf("DECODE", fromIndex);
|
int index = statement.toUpperCase().indexOf("DECODE", fromIndex);
|
||||||
if (index <= 0) return sqlStatement;
|
if (index <= 0) return sqlStatement;
|
||||||
|
|
||||||
if (Character.isWhitespace(statement.charAt(index - 1)) == false)
|
char previousChar = statement.charAt(index - 1);
|
||||||
|
if (!(Character.isWhitespace(previousChar) || isOperator(previousChar)))
|
||||||
return sqlStatement;
|
return sqlStatement;
|
||||||
|
|
||||||
String firstPart = statement.substring(0,index);
|
String firstPart = statement.substring(0,index);
|
||||||
|
@ -434,5 +435,54 @@ public abstract class Convert_SQL92 extends Convert {
|
||||||
|
|
||||||
return sqlStatement;
|
return sqlStatement;
|
||||||
} // convertDelete
|
} // convertDelete
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is character a valid sql operator
|
||||||
|
* @param c
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
protected boolean isOperator(char c)
|
||||||
|
{
|
||||||
|
if ('=' == c)
|
||||||
|
return true;
|
||||||
|
else if ('<' == c)
|
||||||
|
return true;
|
||||||
|
else if ('>' == c)
|
||||||
|
return true;
|
||||||
|
else if ('|' == c)
|
||||||
|
return true;
|
||||||
|
else if ('(' == c)
|
||||||
|
return true;
|
||||||
|
else if (')' == c)
|
||||||
|
return true;
|
||||||
|
else if ('+' == c)
|
||||||
|
return true;
|
||||||
|
else if ('-' == c)
|
||||||
|
return true;
|
||||||
|
else if ('*' == c)
|
||||||
|
return true;
|
||||||
|
else if ('/' == c)
|
||||||
|
return true;
|
||||||
|
else if ('!' == c)
|
||||||
|
return true;
|
||||||
|
else if (',' == c)
|
||||||
|
return true;
|
||||||
|
else if ('?' == c)
|
||||||
|
return true;
|
||||||
|
else if ('#' == c)
|
||||||
|
return true;
|
||||||
|
else if ('@' == c)
|
||||||
|
return true;
|
||||||
|
else if ('~' == c)
|
||||||
|
return true;
|
||||||
|
else if ('&' == c)
|
||||||
|
return true;
|
||||||
|
else if ('^' == c)
|
||||||
|
return true;
|
||||||
|
else if ('!' == c)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue