> >* STRING + BINARY CHANGE THE MAPPING >SELECT; > 'A'+0h32 ; && VARCHAR(2) *** 'A'+0h32 is varchar expression so result is *** VARCHAR(2) regardless of SET VARCHARMAPPING > >* FIXED LENGHT ? >SELECT; > STR(4) ; && VARCHAR(10) >, STR(4,10) ; && VARCHAR(10) *** I think it's a bug that STR() with constant (or default) for it's second parameter *** is not considered as returning fixed length >, DTOC({}) ; && VARCHAR(10) >, TTOC({/ :}) ; && VARCHAR(19) *** They're not fixed lenght because their result depends on some SET command(s) > FROM BYBYBUG INTO CURSOR RRR >LIST STRUCTURE > >* FUNCTION ON LITERAL PARAMETER CHANGE THE MAPPING ? >SELECT; > SPACE(1) ; && CHAR(1) >, SPACE(INT(1)) ; && VARCHAR(1) INT() CHANGE THE MAPPING *** That something that should be documented but is not. *** Looks like expression with call to a function as a function parameter makes result varaible length >, CHR(1) ; && CHAR(1) >, CHR(INT(1)) ; && CHAR(1) INT() DON'T CHANGE THE MAPPING *** You're kidding, right? CHR() always returns 1 character. > FROM BYBYBUG INTO CURSOR RRR >LIST STRUCTURE > >* OPERATORS CHANGE THE MAPPING ? >SELECT; > SPACE(10*2) ; && CHAR(20) && -+*/^ NOT CHANGE THE MAPPING >, SPACE(10%1000) ; && VARCHAR(10) && % CHANGE THE MAPPING BECAUSE %= FUNCTION MOD() *** This one is not clear, agree. > FROM BYBYBUG INTO CURSOR RRR >LIST STRUCTURE > >* EMPTY STRING IS MAPPED TO VARCHAR(1) >SELECT; > SUBSTR('ABC',3,1) ; && CHAR(1) >, SUBSTR('ABC',4,1) ; && VARCHAR(1) *** You cannot represent empty string in char field > FROM BYBYBUG INTO CURSOR RRR >LIST STRUCTURE > >* ETC....... >>