mirror of
https://github.com/FirebirdSQL/firebird-qa.git
synced 2025-01-22 13:33:07 +01:00
160 lines
5.3 KiB
Python
160 lines
5.3 KiB
Python
#coding:utf-8
|
|
|
|
"""
|
|
ID: issue-4888
|
|
ISSUE: 4888
|
|
TITLE: Can't select from table with ICU column when database (.FDB) is created on
|
|
LINUX with icu 4.2.1 and then copied to WINDOWS
|
|
DESCRIPTION:
|
|
Database for this test was created beforehand on Linux host.
|
|
DDL:
|
|
create collation nums_coll for utf8 from unicode case insensitive 'NUMERIC-SORT=1';
|
|
create domain dm_nums as varchar(20) character set utf8 collate nums_coll;
|
|
recreate table wares(id bigint generated by default as identity, numb dm_nums unique using index wares_numb_unq);
|
|
|
|
Table 'wares' then filled-up with some utf8 data and then *raw* .fdb file was copied on Windows host.
|
|
|
|
insert into wares(numb) values('lengéscsillapító');
|
|
insert into wares(numb) values('viselő');
|
|
insert into wares(numb) values('bærende');
|
|
insert into wares(numb) values('ρουλεμάν');
|
|
insert into wares(numb) values('αμορτισέρ');
|
|
insert into wares(numb) values('støtdemper');
|
|
|
|
Connect to this database without repairing ICU and querying table WARES will produce error:
|
|
===
|
|
SQL> select * from wares;
|
|
Statement failed, SQLSTATE = 22021
|
|
COLLATION NUMS_COLL for CHARACTER SET UTF8 is not installed
|
|
===
|
|
|
|
This test makes unzip of 'raw' .fdb and run fbsvcmgr with key 'rpr_icu' in order to fix ICU incompatibility.
|
|
Result of fbsvcmgr (STDOUT and STDERR) should be empty.
|
|
Than we run ISQL and query table with UTF8 data - several rows with varchar field which is filled by text
|
|
from Hungarian, Norwegian and Greek languages.
|
|
|
|
WARNING! 'Raw' database should be recreated in case of changing ODS structure, otherwise one may get:
|
|
===
|
|
File "c:\\firebirdqa\\fbtest\\fbtest.py", line 827, in run
|
|
exec substitute_macros(self.test_script) in global_ns, local_ns
|
|
|
|
File "", line 29, in
|
|
|
|
File "c:\\python27\\lib\\subprocess.py", line 540, in check_call
|
|
raise CalledProcessError(retcode, cmd)
|
|
===
|
|
|
|
Linux ICU info:
|
|
$ rpm -qa | grep icu
|
|
icu4j-eclipse-4.2.1-5.el6.x86_64
|
|
libicu-4.2.1-9.1.el6_2.x86_64
|
|
|
|
Database initially was created on LI-V3.0.0.32239, then re-created 20.10.2016 on LI-T4.0.0.419 because ODS was changed.
|
|
Checked on OS = Windows XP: WI-V3.0.1.32570, WI-T4.0.0.321
|
|
20.10.2016: checked on WI-T4.0.0.420
|
|
22.04.2020: checked on WI-T4.0.0.1920 - updated .fdb because of new system tables.
|
|
JIRA: CORE-4571
|
|
FBTEST: bugs.core_4571
|
|
"""
|
|
|
|
import pytest
|
|
from firebird.qa import *
|
|
|
|
db = db_factory()
|
|
|
|
act = python_act('db')
|
|
|
|
expected_stdout = """
|
|
ID 3
|
|
NUMB bærende
|
|
ID 1
|
|
NUMB lengéscsillapító
|
|
ID 6
|
|
NUMB støtdemper
|
|
ID 2
|
|
NUMB viselő
|
|
ID 5
|
|
NUMB αμορτισέρ
|
|
ID 4
|
|
NUMB ρουλεμάν
|
|
"""
|
|
|
|
@pytest.mark.skip('FIXME: Not IMPLEMENTED')
|
|
@pytest.mark.version('>=3.0')
|
|
@pytest.mark.platform('Windows')
|
|
def test_1(act: Action):
|
|
pytest.fail("Not IMPLEMENTED")
|
|
|
|
# test_script_1
|
|
#---
|
|
# import os
|
|
# import time
|
|
# import zipfile
|
|
# import subprocess
|
|
#
|
|
# os.environ["ISC_USER"] = user_name
|
|
# os.environ["ISC_PASSWORD"] = user_password
|
|
#
|
|
# # Obtain ODS major version:
|
|
# cur1 = db_conn.cursor()
|
|
# cur1.execute("select mon$ods_major as ods from mon$database")
|
|
# for row in cur1:
|
|
# ods = str(row[0])
|
|
# db_conn.close()
|
|
#
|
|
# zf = zipfile.ZipFile( os.path.join(context['files_location'],'core_4571.zip') )
|
|
# tmpfdb = 'core_4571-ods'+ods+'.fdb'
|
|
# zf.extract( tmpfdb, '$(DATABASE_LOCATION)')
|
|
# zf.close()
|
|
#
|
|
# tmpfdb='$(DATABASE_LOCATION)'+tmpfdb
|
|
#
|
|
# f_svc_rpr=open( os.path.join(context['temp_directory'],'tmp_icu_repair_4571.log'), 'w')
|
|
# subprocess.check_call(["fbsvcmgr","localhost:service_mgr",
|
|
# "action_repair",
|
|
# "dbname",tmpfdb,
|
|
# "rpr_icu"],
|
|
# stdout=f_svc_rpr,
|
|
# stderr=subprocess.STDOUT)
|
|
# f_svc_rpr.close()
|
|
#
|
|
# sqltxt='''set list on; select id, numb from wares order by numb;'''
|
|
#
|
|
# f_sql_log=open( os.path.join(context['temp_directory'],'tmp_isql_4571.log'), 'w')
|
|
# f_sql_log.close()
|
|
# runProgram('isql', ['localhost:'+tmpfdb,'-q', '-o',f_sql_log.name], sqltxt)
|
|
#
|
|
# with open( f_svc_rpr.name,'r') as f:
|
|
# print(f.read())
|
|
# f.close()
|
|
#
|
|
# with open( f_sql_log.name,'r') as f:
|
|
# print(f.read())
|
|
# f.close()
|
|
#
|
|
# # Checked result on Linux:
|
|
# # ID NUMB
|
|
# # == ===================
|
|
# # 3 bærende
|
|
# # 1 lengéscsillapító
|
|
# # 6 støtdemper
|
|
# # 2 viselő
|
|
# # 5 αμορτισέρ
|
|
# # 4 ρουλεμάν
|
|
#
|
|
# #####################################################################
|
|
# # Cleanup:
|
|
#
|
|
# # do NOT remove this pause otherwise some of logs will not be enable for deletion and test will finish with
|
|
# # Exception raised while executing Python test script. exception: WindowsError: 32
|
|
# time.sleep(1)
|
|
#
|
|
# f_list=[f_svc_rpr, f_sql_log]
|
|
# for i in range(len(f_list)):
|
|
# if os.path.isfile(f_list[i].name):
|
|
# os.remove(f_list[i].name)
|
|
# os.remove(tmpfdb)
|
|
#
|
|
#
|
|
#---
|