Wrong comparison of value with control character
------------------------------------------------

                 Key: CORE-5406
                 URL: http://tracker.firebirdsql.org/browse/CORE-5406
             Project: Firebird Core
          Issue Type: Bug
    Affects Versions: 2.5.6
            Reporter: Pavel Cisar


When column contains trailing control character <CR> (#13) then result of 
comparison depends on the presence of index on this column.

Script to reproduce:

CREATE TABLE T
(
    PK integer primary key,
    C1 CHAR(10),
    C2 VARCHAR(10)
);

INSERT INTO T (PK, C1, C2) VALUES (1,'C1#','C1#');
INSERT INTO T (PK, C1, C2) VALUES (2,'C2#','C2#');
INSERT INTO T (PK, C1, C2);
 VALUES (3,'C2#' || ascii_char(13),
 'C2#' || ascii_char(13));
INSERT INTO T (PK, C1, C2)
 VALUES (4,'C1#' || ascii_char(13),
 'C1#' || ascii_char(13));

commit;

SELECT a.*,char_length(c1),char_length(c2) FROM T a;

Result

                  PK   C1                C2                 CHAR_LENGTH  
CHAR_LENGTH 
============ ========== ========== ============= =============
                      1 C1#              C1#                                    
  10                        3 
                      2 C2#              C2#                                    
  10                        3 
                      3 C2#              C2#                                    
  10                        4 
                      4 C1#              C1#                                    
  10                        4 


SELECT a.*,char_length(c1),char_length(c2) FROM T a WHERE C1 <= 'C1#';

                    PK C1                C2                 CHAR_LENGTH  
CHAR_LENGTH 
============ ========== ========== ============= =============
                      1 C1#               C1#                                   
 10                         3 
                      4 C1#               C1#                                   
 10                         4 


SELECT a.*,char_length(c1),char_length(c2) FROM T a WHERE C2 <= 'C1#';


                    PK C1                C2                 CHAR_LENGTH  
CHAR_LENGTH 
============ ========== ========== ============= =============
                      1 C1#               C1#                                   
 10                         3 
                      4 C1#               C1#                                   
 10                         4 

CREATE INDEX IDX_T1 ON T (C1);
CREATE INDEX IDX_T2 ON T (C2);

commit;

SELECT a.*,char_length(c1),char_length(c2) FROM T a WHERE C1 <= 'C1#';

                    PK C1                C2                 CHAR_LENGTH  
CHAR_LENGTH 
============ ========== ========== ============= =============
                      1 C1#               C1#                                   
 10                         3 

SELECT a.*,char_length(c1),char_length(c2) FROM T a WHERE C2 <= 'C1#';

                    PK C1                C2                 CHAR_LENGTH  
CHAR_LENGTH 
============ ========== ========== ============= =============
                      1 C1#               C1#                                   
 10                         3 



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://tracker.firebirdsql.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to