Openbravo Issue Tracking System - Openbravo ERP
View Issue Details
0007793Openbravo ERPA. Platformpublic2009-02-06 12:042012-02-20 11:41
dalsasua 
shuehner 
normalminoralways
closedout of date 
20rPath Linux
pi 
 
Core
No
0007793: substr overloading for postgresql not working
In the Oracle native substr function, when an index of 0 is received as first position of the string, it turns it to a 1. In postgresql, if a 0 is received, then no value is returned as first character, so there exists a function called substr in OpenbravoERP that tries to emulate this behavior:

-- Function: substr(character varying, numeric, numeric)
CREATE OR REPLACE FUNCTION substr(character varying, numeric, numeric)
  RETURNS character varying AS
$BODY$
BEGIN
return substr($1,CAST((CASE $2 WHEN 0 THEN 1 ELSE $2 END) AS INTEGER), CAST($3 AS INTEGER));
END;
$BODY$
  LANGUAGE 'plpgsql' IMMUTABLE
  COST 100;

Actually, this is not working, because when a substr function is invoked, then the postgresql native one is executed. The difference between both functions is in the parameter types:

The one in Openbravo ERP:
substr(character varying, numeric, numeric)

Included in Postgresql catalog:
substr(text, integer, integer)
as well as
substr(bytea, integer)
substr(text, integer)
substr(bytea, integer, integer)

substr function must be re-defined
In Oracle:

select substr('123',0,2) from dual; -> 12
select substr('123',0,1) from dual; -> 1

In Postgresql:

select substr('123',0,2); -> 1
select substr('123',0,1); -> <empty string>
No tags attached.
blocks design defect 0007412 acknowledged AugustoMauch substr overloading for postgresql not working 
Issue History
2009-02-24 12:10psarobeTypedefect => backport
2009-02-24 12:10psarobefix_in_branch => 2.40
2009-02-24 12:11psarobeAssigned Topjuvara => shuehner
2012-02-20 11:41shuehnerStatusscheduled => closed
2012-02-20 11:41shuehnerResolutionopen => out of date

There are no notes attached to this issue.