|
15 | 15 | NOTES: |
16 | 16 | [23.01.2024] pzotov |
17 | 17 | Adjusted output after fixed gh-7924: column 'b_added_charset' character set must be changed to utf8. |
| 18 | +
|
| 19 | + [24.01.2024] pzotov |
| 20 | + Currently gh-7924 fixed only for FB 6.x, thus charsets for FB 3.x ... 5.x will not be changed. |
| 21 | + Because of that, expected_output depends on major FB version, see its definition in 'blob_new_cset'. |
| 22 | + Checked on 6.0.0.223, 5.0.1.1322 |
18 | 23 | """ |
19 | 24 |
|
20 | 25 | import pytest |
|
56 | 61 | act = python_act('db', substitutions=substitutions) |
57 | 62 |
|
58 | 63 | sql_script = """ |
59 | | -alter table t1 |
60 | | - alter si type int computed by (32767) -- LONG |
61 | | - ,alter bi type int computed by (2147483647) -- LONG |
62 | | - ,alter s2 type smallint computed by ( 1 + mod(bi, nullif(si,0)) ) -- SHORT |
63 | | -
|
64 | | - ,alter dx type float computed by( pi()/2 ) -- FLOAT |
65 | | - ,alter fx type float computed by (dx*dx*dx) -- FLOAT |
66 | | - ,alter nf type bigint computed by (fx * fx) -- INT64 |
67 | | -
|
68 | | - ,alter dt type date computed by ('today') -- DATE |
69 | | - ,alter tm type timestamp computed by ('now') -- TIMESTAMP |
70 | | -
|
71 | | - ,alter c_change_cb_value type char character set win1251 computed by ('Ё') -- TEXT |
72 | | - ,alter c_change_charset type char character set utf8 computed by ('Æ') -- TEXT |
73 | | - ,alter c_change_length type char(2) computed by ('∑∞') -- TEXT |
74 | | -
|
75 | | - -- All these fields, of course, should remain in type = BLOB, |
76 | | - -- but when charset is removed (field "b_remove_charset") then blob subtype has to be changed to 0, |
77 | | - -- and when we ADD charset (field "b_added_charset") then blob subtype has to be changed to 1. |
78 | | - ,alter b_change_cb_value type blob character set win1251 computed by ('Ё') -- BLOB |
79 | | - ,alter b_change_charset type blob character set iso8859_1 computed by ('å') -- BLOB |
80 | | - ,alter b_remove_charset type blob /*character set win1252 */ computed by ('Æ') -- BLOB |
81 | | - ,alter b_added_charset type blob character set utf8 computed by ('∞') -- BLOB |
82 | | -; |
83 | | -commit; |
84 | | -set sqlda_display on; |
85 | | -select * from t1; |
86 | | -exit; |
| 64 | + alter table t1 |
| 65 | + alter si type int computed by (32767) -- LONG |
| 66 | + ,alter bi type int computed by (2147483647) -- LONG |
| 67 | + ,alter s2 type smallint computed by ( 1 + mod(bi, nullif(si,0)) ) -- SHORT |
| 68 | +
|
| 69 | + ,alter dx type float computed by( pi()/2 ) -- FLOAT |
| 70 | + ,alter fx type float computed by (dx*dx*dx) -- FLOAT |
| 71 | + ,alter nf type bigint computed by (fx * fx) -- INT64 |
| 72 | +
|
| 73 | + ,alter dt type date computed by ('today') -- DATE |
| 74 | + ,alter tm type timestamp computed by ('now') -- TIMESTAMP |
| 75 | +
|
| 76 | + ,alter c_change_cb_value type char character set win1251 computed by ('Ё') -- TEXT |
| 77 | + ,alter c_change_charset type char character set utf8 computed by ('Æ') -- TEXT |
| 78 | + ,alter c_change_length type char(2) computed by ('∑∞') -- TEXT |
| 79 | +
|
| 80 | + -- All these fields, of course, should remain in type = BLOB, |
| 81 | + -- but when charset is removed (field "b_remove_charset") then blob subtype has to be changed to 0, |
| 82 | + -- and when we ADD charset (field "b_added_charset") then blob subtype has to be changed to 1. |
| 83 | + ,alter b_change_cb_value type blob character set win1251 computed by ('Ё') -- BLOB |
| 84 | + ,alter b_change_charset type blob character set iso8859_1 computed by ('å') -- BLOB |
| 85 | + ,alter b_remove_charset type blob /*character set win1252 */ computed by ('Æ') -- BLOB |
| 86 | + ,alter b_added_charset type blob character set utf8 computed by ('∞') -- BLOB |
| 87 | + ; |
| 88 | + commit; |
| 89 | + set sqlda_display on; |
| 90 | + select * from t1; |
87 | 91 | """ |
88 | 92 |
|
89 | 93 | expected_stdout_a = """ |
|
121 | 125 | : NAME: B_ADDED_CHARSET ALIAS: B_ADDED_CHARSET |
122 | 126 | """ |
123 | 127 |
|
124 | | -expected_stdout_b = """ |
125 | | - 01: SQLTYPE: 496 LONG NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 |
126 | | - : NAME: N0 ALIAS: N0 |
127 | | - 02: SQLTYPE: 496 LONG NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 |
128 | | - : NAME: SI ALIAS: SI |
129 | | - 03: SQLTYPE: 496 LONG NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 |
130 | | - : NAME: BI ALIAS: BI |
131 | | - 04: SQLTYPE: 500 SHORT NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 2 |
132 | | - : NAME: S2 ALIAS: S2 |
133 | | - 05: SQLTYPE: 482 FLOAT NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 |
134 | | - : NAME: DX ALIAS: DX |
135 | | - 06: SQLTYPE: 482 FLOAT NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 |
136 | | - : NAME: FX ALIAS: FX |
137 | | - 07: SQLTYPE: 580 INT64 NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 8 |
138 | | - : NAME: NF ALIAS: NF |
139 | | - 08: SQLTYPE: 570 SQL DATE NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 |
140 | | - : NAME: DT ALIAS: DT |
141 | | - 09: SQLTYPE: 510 TIMESTAMP NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 8 |
142 | | - : NAME: TM ALIAS: TM |
143 | | - 10: SQLTYPE: 452 TEXT NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 CHARSET: 4 UTF8 |
144 | | - : NAME: C_CHANGE_CB_VALUE ALIAS: C_CHANGE_CB_VALUE |
145 | | - 11: SQLTYPE: 452 TEXT NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 CHARSET: 4 UTF8 |
146 | | - : NAME: C_CHANGE_CHARSET ALIAS: C_CHANGE_CHARSET |
147 | | - 12: SQLTYPE: 452 TEXT NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 8 CHARSET: 4 UTF8 |
148 | | - : NAME: C_CHANGE_LENGTH ALIAS: C_CHANGE_LENGTH |
149 | | - 13: SQLTYPE: 520 BLOB NULLABLE SCALE: 0 SUBTYPE: 1 LEN: 8 CHARSET: 4 UTF8 |
150 | | - : NAME: B_CHANGE_CB_VALUE ALIAS: B_CHANGE_CB_VALUE |
151 | | - 14: SQLTYPE: 520 BLOB NULLABLE SCALE: 0 SUBTYPE: 1 LEN: 8 CHARSET: 4 UTF8 |
152 | | - : NAME: B_CHANGE_CHARSET ALIAS: B_CHANGE_CHARSET |
153 | | - 15: SQLTYPE: 520 BLOB NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 8 |
154 | | - : NAME: B_REMOVE_CHARSET ALIAS: B_REMOVE_CHARSET |
155 | | - 16: SQLTYPE: 520 BLOB NULLABLE SCALE: 0 SUBTYPE: 1 LEN: 8 CHARSET: 4 UTF8 |
156 | | - : NAME: B_ADDED_CHARSET ALIAS: B_ADDED_CHARSET |
157 | | -""" |
| 128 | +BLOB_NEW_CSET_5X = 'CHARSET: 0 NONE' |
| 129 | +BLOB_NEW_CSET_6X = 'CHARSET: 4 UTF8' |
158 | 130 |
|
159 | 131 | @pytest.mark.version('>=3.0') |
160 | 132 | def test_1(act: Action): |
161 | 133 | act.expected_stdout = expected_stdout_a |
162 | 134 | act.isql(switches=['-q', '-m'], input='set sqlda_display on; select * from t1;') |
163 | 135 | act.stdout = act.stdout.upper() |
164 | 136 | assert act.clean_stdout == act.clean_expected_stdout |
165 | | - # |
166 | 137 | act.reset() |
| 138 | + |
| 139 | + #################################################### |
| 140 | + # ::: NB ::: |
| 141 | + # We have to separate result for B_ADDED_CHARSET because it differs in FB 6.x and older versions |
| 142 | + # |
| 143 | + blob_new_cset = BLOB_NEW_CSET_5X if act.is_version('<6') else BLOB_NEW_CSET_6X |
| 144 | + #################################################### |
| 145 | + expected_stdout_b = f""" |
| 146 | + 01: SQLTYPE: 496 LONG NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 |
| 147 | + : NAME: N0 ALIAS: N0 |
| 148 | + 02: SQLTYPE: 496 LONG NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 |
| 149 | + : NAME: SI ALIAS: SI |
| 150 | + 03: SQLTYPE: 496 LONG NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 |
| 151 | + : NAME: BI ALIAS: BI |
| 152 | + 04: SQLTYPE: 500 SHORT NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 2 |
| 153 | + : NAME: S2 ALIAS: S2 |
| 154 | + 05: SQLTYPE: 482 FLOAT NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 |
| 155 | + : NAME: DX ALIAS: DX |
| 156 | + 06: SQLTYPE: 482 FLOAT NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 |
| 157 | + : NAME: FX ALIAS: FX |
| 158 | + 07: SQLTYPE: 580 INT64 NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 8 |
| 159 | + : NAME: NF ALIAS: NF |
| 160 | + 08: SQLTYPE: 570 SQL DATE NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 |
| 161 | + : NAME: DT ALIAS: DT |
| 162 | + 09: SQLTYPE: 510 TIMESTAMP NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 8 |
| 163 | + : NAME: TM ALIAS: TM |
| 164 | + 10: SQLTYPE: 452 TEXT NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 CHARSET: 4 UTF8 |
| 165 | + : NAME: C_CHANGE_CB_VALUE ALIAS: C_CHANGE_CB_VALUE |
| 166 | + 11: SQLTYPE: 452 TEXT NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 4 CHARSET: 4 UTF8 |
| 167 | + : NAME: C_CHANGE_CHARSET ALIAS: C_CHANGE_CHARSET |
| 168 | + 12: SQLTYPE: 452 TEXT NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 8 CHARSET: 4 UTF8 |
| 169 | + : NAME: C_CHANGE_LENGTH ALIAS: C_CHANGE_LENGTH |
| 170 | + 13: SQLTYPE: 520 BLOB NULLABLE SCALE: 0 SUBTYPE: 1 LEN: 8 CHARSET: 4 UTF8 |
| 171 | + : NAME: B_CHANGE_CB_VALUE ALIAS: B_CHANGE_CB_VALUE |
| 172 | + 14: SQLTYPE: 520 BLOB NULLABLE SCALE: 0 SUBTYPE: 1 LEN: 8 CHARSET: 4 UTF8 |
| 173 | + : NAME: B_CHANGE_CHARSET ALIAS: B_CHANGE_CHARSET |
| 174 | + 15: SQLTYPE: 520 BLOB NULLABLE SCALE: 0 SUBTYPE: 0 LEN: 8 |
| 175 | + : NAME: B_REMOVE_CHARSET ALIAS: B_REMOVE_CHARSET |
| 176 | + 16: SQLTYPE: 520 BLOB NULLABLE SCALE: 0 SUBTYPE: 1 LEN: 8 {blob_new_cset} |
| 177 | + : NAME: B_ADDED_CHARSET ALIAS: B_ADDED_CHARSET |
| 178 | + """ |
| 179 | + |
167 | 180 | act.expected_stdout = expected_stdout_b |
168 | 181 | act.isql(switches=['-q', '-m'], input=sql_script) |
169 | 182 | act.stdout = act.stdout.upper() |
|
0 commit comments