SIMILAR TO can raise 'INVALID PATTERN' when 1) connection charset = UTF8 and console is narrow one (dos866 or win1251) and 2) running two separate statements without COMMIT between them -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key: CORE-4749 URL: http://tracker.firebirdsql.org/browse/CORE-4749 Project: Firebird Core Issue Type: Bug Components: Charsets/Collation Reporter: Pavel Zotov OS: Windows XP Console charset: DOS866 Database charset: NONE Connection charset: UTF8 (should be dos866 but was occasionally selected = UTF8) TEST-1: verify results of old good `SIMILAR TO` rather than `SUBSTRING( ... SIMILAR ... )`: ====== C:\MIX\firebird\QA\fbt-repo\tmp>C:\MIX\firebird\fb30\isql.exe localhost/3333:e30 -ch utf8 Database: localhost/3333:e30 SQL> select iif( 'aaxyaaxyaaaaxyaaaxyaa' similar to '%(aaxy|aaax){2,}%', 1, 0 ) is_matching from rdb$database; IS_MATCHING ============ 1 SQL> select iif( 'eiavieieav' similar to '%(ie){2,}%', 1, 0 ) is_matching from rdb$database; IS_MATCHING ============ 1 // OK TEST-2: verify results of `SUBSTRING( ... SIMILAR ...)` with the same arguments: ====== C:\MIX\firebird\QA\fbt-repo\tmp>C:\MIX\firebird\fb30\isql.exe localhost/3333:e30 -ch utf8 Database: localhost/3333:e30 SQL> select substring( 'aaxyaaxyaaaaxyaaaxyaa' similar '%\"(aaxy|aaax){2,}\"%' escape '\' ) from rdb$database; SUBSTRING ===================== aaxyaaxy SQL> select substring( 'eiavieieav' similar '%\"(ie){2,}\"%' escape '\' ) from rdb$database; SUBSTRING ========== Statement failed, SQLSTATE = 42000 Invalid SIMILAR TO pattern TEST-3: same as test-2 but note that between two statements `COMMIT;` present: ====== C:\MIX\firebird\QA\fbt-repo\tmp>C:\MIX\firebird\fb30\isql.exe localhost/3333:e30 -ch utf8 Database: localhost/3333:e30 SQL> select substring( 'aaxyaaxyaaaaxyaaaxyaa' similar '%\"(aaxy|aaax){2,}\"%' escape '\' ) from rdb$database; SUBSTRING ===================== aaxyaaxy SQL> commit; ------------------------------------ <<<<<<<<<<< !! <<<<<<<<<<<<<< SQL> SQL> select substring( 'eiavieieav' similar '%\"(ie){2,}\"%' escape '\' ) from rdb$database; SUBSTRING ========== ieie No error. Q-1: If test-2 failed because of mismatch charset of console and connection then message should be more relevant (may be 'malformed string') - ? Q-2: Why issuing of `COMMIT;` in test-3 solved this trouble ? -- 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 ------------------------------------------------------------------------------ BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT Develop your own process in accordance with the BPMN 2 standard Learn Process modeling best practices with Bonita BPM through live exercises http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_ source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel