2 @message |
assert
1000
select txt_short from test a01 order by id
Must NOT use refetch because length of non-key column is less than threshold
Select Expression
....-> Sort (record length: 1036, key length: 8)
........-> Table "TEST" as "A01" Full Scan
1010
select txt_broad from test a02 order by id
MUST use refetch because length of non-key column is greater than threshold
Select Expression
....-> Refetch
........-> Sort (record length: 28, key length: 8)
............-> Table "TEST" as "A02" Full Scan
1020
select txt_short from test a03 order by id rows 1
MUST use refetch regardless on length of column because ROWS <N> presents
Select Expression
....-> First N Records
........-> Refetch
............-> Sort (record length: 28, key length: 8)
................-> Table "TEST" as "A03" Full Scan
2000
select id, computed_ts_dup from test order by id
Must NOT use refetch because computed column is based on txt_short with length < threshold
Select Expression
....-> Sort (record length: 1036, key length: 8)
........-> Table "TEST" Full Scan
2010
select id, computed_tb_dup from test order by id
MUST use refetch because computed column is based on txt_broad which has length >= threshold
Select Expression
....-> Refetch
........-> Sort (record length: 28, key length: 8)
............-> Table "TEST" Full Scan
3000
select id from test a04 where '' in (select txt_short from test x04 where txt_short = '' order by id)
*** not [yet] commented ***
Sub-query (invariant)
....-> Filter
........-> Sort (record length: 1036, key length: 8)
............-> Filter
................-> Table "TEST" as "X04" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A04" Full Scan
3010
select id from test a05 where '' in (select txt_broad from test x05 where txt_broad = '' order by id)
*** not [yet] commented ***
Sub-query (invariant)
....-> Filter
........-> Refetch
............-> Sort (record length: 28, key length: 8)
................-> Filter
....................-> Table "TEST" as "X05" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A05" Full Scan
3020
select id from test a06 where '' not in (select txt_short from test x06 where txt_short>'' order by id)
*** not [yet] commented ***
- Sub-query (invariant)
+ Select Expression
....-> Sort (record length: 1036, key length: 8)
........-> Filter
............-> Table "TEST" as "X06" Full Scan
- Sub-query (invariant)
+ Select Expression
....-> Sort (record length: 1036, key length: 8)
........-> Filter
............-> Table "TEST" as "X06" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A06" Full Scan
3030
select id from test a07 where '' not in (select txt_broad from test x07 where txt_broad>'' order by id)
*** not [yet] commented ***
- Sub-query (invariant)
+ Select Expression
....-> Refetch
........-> Sort (record length: 28, key length: 8)
............-> Filter
................-> Table "TEST" as "X07" Full Scan
- Sub-query (invariant)
+ Select Expression
....-> Refetch
........-> Sort (record length: 28, key length: 8)
............-> Filter
................-> Table "TEST" as "X07" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A07" Full Scan
3040
select id from test a08 where '' > all (select id from test x08 where txt_short>'' order by id)
*** not [yet] commented ***
Sub-query (invariant)
....-> Filter
........-> Sort (record length: 1036, key length: 8)
............-> Filter
................-> Table "TEST" as "X08" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A08" Full Scan
3050
select id from test a09 where '' > all (select id from test x09 where txt_broad>'' order by id)
*** not [yet] commented ***
Sub-query (invariant)
....-> Filter
........-> Refetch
............-> Sort (record length: 28, key length: 8)
................-> Filter
....................-> Table "TEST" as "X09" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A09" Full Scan
3060
select id from test a10 where '' <> any (select id from test x10 where txt_short>'' order by id)
*** not [yet] commented ***
Sub-query (invariant)
....-> Filter
........-> Sort (record length: 1036, key length: 8)
............-> Filter
................-> Table "TEST" as "X10" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A10" Full Scan
3070
select id from test a11 where '' <> any (select id from test x11 where txt_broad>'' order by id)
*** not [yet] commented ***
Sub-query (invariant)
....-> Filter
........-> Refetch
............-> Sort (record length: 28, key length: 8)
................-> Filter
....................-> Table "TEST" as "X11" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A11" Full Scan
4000
select id,txt_short from test a12 where exists(select 1 from test x12 where txt_short>'' order by id)
MUST use refetch: column x12.txt_short not present in order by
Sub-query (invariant)
....-> Refetch
........-> Sort (record length: 28, key length: 8)
............-> Filter
................-> Table "TEST" as "X12" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A12" Full Scan
4010
select id,txt_short from test a13 where exists(select 1 from test x13 where computed_id_dup > 0 order by id)
Must NOT use refetch: ORDER BY list contains the single element: ID, and it is base for x13.computed_id_dup column
Sub-query (invariant)
....-> Sort (record length: 28, key length: 8)
........-> Filter
............-> Table "TEST" as "X13" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A13" Full Scan
4020
select id,txt_short from test a14 where exists(select 1 from test x14 where computed_id_dup > 0 order by computed_id_dup)
MUST use refetch! See letter from dimitr 28.12.2020 14:49
Sort procedure will get:
a KEY = result of evaluating 'computed_id_dup';
a VAL = value of the field 'ID' which is base for computing 'computed_id_dup'
Thus sorter will have a field which not equals to a key, which leads to refetch.
Sub-query (invariant)
....-> Refetch
........-> Sort (record length: 36, key length: 12)
............-> Filter
................-> Table "TEST" as "X14" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A14" Full Scan
4030
select id,txt_short from test a15 where exists(select 1 from test x15 where f02>0 and f01>0 order by f01, f02)
Must NOT use refetch: all persistent columns from WHERE expression (f01, f02) belong to ORDER BY list
Sub-query (invariant)
....-> Sort (record length: 36, key length: 16)
........-> Filter
............-> Table "TEST" as "X15" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A15" Full Scan
4040
select id,txt_short from test a16 where exists(select 1 from test x16 where id>0 and f01>0 order by f01, f02)
Must use refetch: one of columns from WHERE expr (id) does not belong to ORDER BY list
Sub-query (invariant)
....-> Refetch
........-> Sort (record length: 36, key length: 16)
............-> Filter
................-> Table "TEST" as "X16" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A16" Full Scan
4050
select id,txt_short from test a17 where exists(select 1 from test x17 where computed_id_dup > 0 order by f01)
Must use refetch: computed column in WHERE expr does not belong to ORDER BY list
Sub-query (invariant)
....-> Refetch
........-> Sort (record length: 28, key length: 8)
............-> Filter
................-> Table "TEST" as "X17" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A17" Full Scan
4060
select id,txt_short from test a18 where exists(select 1 from test x18 where computed_guid > '' order by f01)
Must NOT use refetch: computed column x18.computed_guid does is evaluated via GUID and does not refer to any columns
Sub-query (invariant)
....-> Sort (record length: 28, key length: 8)
........-> Filter
............-> Table "TEST" as "X18" Full Scan
Select Expression
....-> Filter (preliminary)
........-> Table "TEST" as "A18" Full Scan
4070
with recursive
r as (
select a19.id, a19.txt_short
from test a19
where not exists(select * from test x where x.txt_short < a19.txt_short order by id)
UNION ALL
select i.id, i.txt_short
from test i
join r on i.id > r.id
and not exists( select * from test x where x.txt_short between r.txt_short and i.txt_short order by id )
)
select * from r
MUST use refetch both in anchor and recursive parts
Sub-query
....-> Refetch
........-> Sort (record length: 28, key length: 8)
............-> Filter
................-> Table "TEST" as "R X" Full Scan
Sub-query
....-> Refetch
........-> Sort (record length: 28, key length: 8)
............-> Filter
................-> Table "TEST" as "R X" Full Scan
Select Expression
....-> Recursion
........-> Filter
............-> Table "TEST" as "R A19" Full Scan
........-> Filter
............-> Table "TEST" as "R I" Full Scan
5000
select txt_broad from v_unioned v01 order by id
Must NOT use refetch because view DDL includes UNION
Select Expression
....-> Sort (record length: 4044, key length: 8)
........-> First N Records
............-> Union
................-> Table "TEST" as "V01 TEST" Full Scan
................-> Table "RDB$DATABASE" as "V01 RDB$DATABASE" Full Scan
6000
select left(txt_broad, 50) as txt from test a21 order by id
MUST use refetch because expression is based on column which has length >= threshold
(even if final length of expression result is much less than threshold)
Select Expression
....-> Refetch
........-> Sort (record length: 28, key length: 8)
............-> Table "TEST" as "A21" Full Scan
6010
select left( txt_short || txt_short, 2000) as txt from test a22 order by id
Must NOT use refetch because expression is based on column which has length < threshold
(even if final length of expression result is much bigger than threshold)
Select Expression
....-> Sort (record length: 1036, key length: 8)
........-> Table "TEST" as "A22" Full Scan
7000
select * from test_ns_01 a23 order by id
MUST use refetch
Select Expression
....-> Refetch
........-> Sort (record length: 44, key length: 24)
............-> Table "TEST_NS_01" as "A23" Full Scan
7010
select * from test_ns_02 a24 order by id
Must NOT refetch
Select Expression
....-> Sort (record length: 1052, key length: 24)
........-> Table "TEST_NS_02" as "A24" Full Scan
7020
select * from test_ns_03 order by id
MUST use refetch
Select Expression
....-> Refetch
........-> Sort (record length: 36, key length: 12)
............-> Table "TEST_NS_03" Full Scan
7030
select * from test_ns_04 order by id
Must NOT use refetch
Select Expression
....-> Sort (record length: 1036, key length: 12)
........-> Table "TEST_NS_04" Full Scan
7040
select * from test_ns_05 order by id
MUST use refetch
Select Expression
....-> Refetch
........-> Sort (record length: 36, key length: 12)
............-> Table "TEST_NS_05" Full Scan
7050
select * from test_ns_06 order by id
Must NOT use refetch
Select Expression
....-> Sort (record length: 1036, key length: 12)
........-> Table "TEST_NS_06" Full Scan
LOG DETAILS:
2025-02-14 09:37:03.802
2025-02-14 09:37:03.803 act = <firebird.qa.plugin.Action object at [hex]>
2025-02-14 09:37:03.803 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2025-02-14 09:37:03.803
2025-02-14 09:37:03.803 @pytest.mark.version('>=4.0')
2025-02-14 09:37:03.803 def test_1(act: Action, capsys):
2025-02-14 09:37:03.803 with act.db.connect() as con:
2025-02-14 09:37:03.803
2025-02-14 09:37:03.803 # 13.01.2025: test will FAIL if config parameter OptimizeForFirstRows differs from default value (i.e. is set to true).
2025-02-14 09:37:03.803 # To prevent this, we have to explicitly change appropriate session-level value:
2025-02-14 09:37:03.803 if act.is_version('<5'):
2025-02-14 09:37:03.803 pass
2025-02-14 09:37:03.803 else:
2025-02-14 09:37:03.803 con.execute_immediate('set optimize for all rows')
2025-02-14 09:37:03.803
2025-02-14 09:37:03.803 cur = con.cursor()
2025-02-14 09:37:03.803 for q_idx, q_tuple in query_map.items():
2025-02-14 09:37:03.803 test_sql, qry_comment = q_tuple[:2]
2025-02-14 09:37:03.803 ps = cur.prepare(test_sql)
2025-02-14 09:37:03.803 print(q_idx)
2025-02-14 09:37:03.804 print(test_sql)
2025-02-14 09:37:03.804 print(qry_comment)
2025-02-14 09:37:03.804 print( '\n'.join([replace_leading(s) for s in ps.detailed_plan.split('\n')]) )
2025-02-14 09:37:03.804 ps.free()
2025-02-14 09:37:03.804
2025-02-14 09:37:03.804 act.expected_stdout = fb4x_expected_out if act.is_version('<5') else fb5x_expected_out if act.is_version('<6') else fb6x_expected_out
2025-02-14 09:37:03.804 act.stdout = capsys.readouterr().out
2025-02-14 09:37:03.804 > assert act.clean_stdout == act.clean_expected_stdout
2025-02-14 09:37:03.804 E assert
2025-02-14 09:37:03.804 E 1000
2025-02-14 09:37:03.804 E select txt_short from test a01 order by id
2025-02-14 09:37:03.804 E Must NOT use refetch because length of non-key column is less than threshold
2025-02-14 09:37:03.804 E Select Expression
2025-02-14 09:37:03.804 E ....-> Sort (record length: 1036, key length: 8)
2025-02-14 09:37:03.804 E ........-> Table "TEST" as "A01" Full Scan
2025-02-14 09:37:03.804 E 1010
2025-02-14 09:37:03.804 E select txt_broad from test a02 order by id
2025-02-14 09:37:03.804 E MUST use refetch because length of non-key column is greater than threshold
2025-02-14 09:37:03.805 E Select Expression
2025-02-14 09:37:03.805 E ....-> Refetch
2025-02-14 09:37:03.805 E ........-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.805 E ............-> Table "TEST" as "A02" Full Scan
2025-02-14 09:37:03.805 E 1020
2025-02-14 09:37:03.805 E select txt_short from test a03 order by id rows 1
2025-02-14 09:37:03.805 E MUST use refetch regardless on length of column because ROWS <N> presents
2025-02-14 09:37:03.805 E Select Expression
2025-02-14 09:37:03.805 E ....-> First N Records
2025-02-14 09:37:03.805 E ........-> Refetch
2025-02-14 09:37:03.805 E ............-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.805 E ................-> Table "TEST" as "A03" Full Scan
2025-02-14 09:37:03.805 E 2000
2025-02-14 09:37:03.805 E select id, computed_ts_dup from test order by id
2025-02-14 09:37:03.805 E Must NOT use refetch because computed column is based on txt_short with length < threshold
2025-02-14 09:37:03.805 E Select Expression
2025-02-14 09:37:03.805 E ....-> Sort (record length: 1036, key length: 8)
2025-02-14 09:37:03.805 E ........-> Table "TEST" Full Scan
2025-02-14 09:37:03.805 E 2010
2025-02-14 09:37:03.806 E select id, computed_tb_dup from test order by id
2025-02-14 09:37:03.806 E MUST use refetch because computed column is based on txt_broad which has length >= threshold
2025-02-14 09:37:03.806 E Select Expression
2025-02-14 09:37:03.806 E ....-> Refetch
2025-02-14 09:37:03.806 E ........-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.806 E ............-> Table "TEST" Full Scan
2025-02-14 09:37:03.806 E 3000
2025-02-14 09:37:03.806 E select id from test a04 where '' in (select txt_short from test x04 where txt_short = '' order by id)
2025-02-14 09:37:03.806 E *** not [yet] commented ***
2025-02-14 09:37:03.806 E Sub-query (invariant)
2025-02-14 09:37:03.806 E ....-> Filter
2025-02-14 09:37:03.806 E ........-> Sort (record length: 1036, key length: 8)
2025-02-14 09:37:03.806 E ............-> Filter
2025-02-14 09:37:03.806 E ................-> Table "TEST" as "X04" Full Scan
2025-02-14 09:37:03.806 E Select Expression
2025-02-14 09:37:03.806 E ....-> Filter (preliminary)
2025-02-14 09:37:03.806 E ........-> Table "TEST" as "A04" Full Scan
2025-02-14 09:37:03.806 E 3010
2025-02-14 09:37:03.806 E select id from test a05 where '' in (select txt_broad from test x05 where txt_broad = '' order by id)
2025-02-14 09:37:03.807 E *** not [yet] commented ***
2025-02-14 09:37:03.807 E Sub-query (invariant)
2025-02-14 09:37:03.807 E ....-> Filter
2025-02-14 09:37:03.807 E ........-> Refetch
2025-02-14 09:37:03.807 E ............-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.807 E ................-> Filter
2025-02-14 09:37:03.807 E ....................-> Table "TEST" as "X05" Full Scan
2025-02-14 09:37:03.807 E Select Expression
2025-02-14 09:37:03.807 E ....-> Filter (preliminary)
2025-02-14 09:37:03.807 E ........-> Table "TEST" as "A05" Full Scan
2025-02-14 09:37:03.807 E 3020
2025-02-14 09:37:03.807 E select id from test a06 where '' not in (select txt_short from test x06 where txt_short>'' order by id)
2025-02-14 09:37:03.807 E *** not [yet] commented ***
2025-02-14 09:37:03.807 E - Sub-query (invariant)
2025-02-14 09:37:03.807 E + Select Expression
2025-02-14 09:37:03.807 E ....-> Sort (record length: 1036, key length: 8)
2025-02-14 09:37:03.807 E ........-> Filter
2025-02-14 09:37:03.807 E ............-> Table "TEST" as "X06" Full Scan
2025-02-14 09:37:03.807 E - Sub-query (invariant)
2025-02-14 09:37:03.808 E + Select Expression
2025-02-14 09:37:03.808 E ....-> Sort (record length: 1036, key length: 8)
2025-02-14 09:37:03.808 E ........-> Filter
2025-02-14 09:37:03.808 E ............-> Table "TEST" as "X06" Full Scan
2025-02-14 09:37:03.808 E Select Expression
2025-02-14 09:37:03.808 E ....-> Filter (preliminary)
2025-02-14 09:37:03.808 E ........-> Table "TEST" as "A06" Full Scan
2025-02-14 09:37:03.808 E 3030
2025-02-14 09:37:03.808 E select id from test a07 where '' not in (select txt_broad from test x07 where txt_broad>'' order by id)
2025-02-14 09:37:03.808 E *** not [yet] commented ***
2025-02-14 09:37:03.808 E - Sub-query (invariant)
2025-02-14 09:37:03.808 E + Select Expression
2025-02-14 09:37:03.808 E ....-> Refetch
2025-02-14 09:37:03.808 E ........-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.808 E ............-> Filter
2025-02-14 09:37:03.808 E ................-> Table "TEST" as "X07" Full Scan
2025-02-14 09:37:03.808 E - Sub-query (invariant)
2025-02-14 09:37:03.808 E + Select Expression
2025-02-14 09:37:03.809 E ....-> Refetch
2025-02-14 09:37:03.809 E ........-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.809 E ............-> Filter
2025-02-14 09:37:03.809 E ................-> Table "TEST" as "X07" Full Scan
2025-02-14 09:37:03.809 E Select Expression
2025-02-14 09:37:03.809 E ....-> Filter (preliminary)
2025-02-14 09:37:03.809 E ........-> Table "TEST" as "A07" Full Scan
2025-02-14 09:37:03.809 E 3040
2025-02-14 09:37:03.809 E select id from test a08 where '' > all (select id from test x08 where txt_short>'' order by id)
2025-02-14 09:37:03.809 E *** not [yet] commented ***
2025-02-14 09:37:03.809 E Sub-query (invariant)
2025-02-14 09:37:03.809 E ....-> Filter
2025-02-14 09:37:03.809 E ........-> Sort (record length: 1036, key length: 8)
2025-02-14 09:37:03.809 E ............-> Filter
2025-02-14 09:37:03.809 E ................-> Table "TEST" as "X08" Full Scan
2025-02-14 09:37:03.809 E Select Expression
2025-02-14 09:37:03.809 E ....-> Filter (preliminary)
2025-02-14 09:37:03.809 E ........-> Table "TEST" as "A08" Full Scan
2025-02-14 09:37:03.810 E 3050
2025-02-14 09:37:03.810 E select id from test a09 where '' > all (select id from test x09 where txt_broad>'' order by id)
2025-02-14 09:37:03.810 E *** not [yet] commented ***
2025-02-14 09:37:03.810 E Sub-query (invariant)
2025-02-14 09:37:03.810 E ....-> Filter
2025-02-14 09:37:03.810 E ........-> Refetch
2025-02-14 09:37:03.810 E ............-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.810 E ................-> Filter
2025-02-14 09:37:03.810 E ....................-> Table "TEST" as "X09" Full Scan
2025-02-14 09:37:03.810 E Select Expression
2025-02-14 09:37:03.810 E ....-> Filter (preliminary)
2025-02-14 09:37:03.810 E ........-> Table "TEST" as "A09" Full Scan
2025-02-14 09:37:03.810 E 3060
2025-02-14 09:37:03.810 E select id from test a10 where '' <> any (select id from test x10 where txt_short>'' order by id)
2025-02-14 09:37:03.810 E *** not [yet] commented ***
2025-02-14 09:37:03.810 E Sub-query (invariant)
2025-02-14 09:37:03.810 E ....-> Filter
2025-02-14 09:37:03.810 E ........-> Sort (record length: 1036, key length: 8)
2025-02-14 09:37:03.810 E ............-> Filter
2025-02-14 09:37:03.810 E ................-> Table "TEST" as "X10" Full Scan
2025-02-14 09:37:03.811 E Select Expression
2025-02-14 09:37:03.811 E ....-> Filter (preliminary)
2025-02-14 09:37:03.811 E ........-> Table "TEST" as "A10" Full Scan
2025-02-14 09:37:03.811 E 3070
2025-02-14 09:37:03.811 E select id from test a11 where '' <> any (select id from test x11 where txt_broad>'' order by id)
2025-02-14 09:37:03.811 E *** not [yet] commented ***
2025-02-14 09:37:03.811 E Sub-query (invariant)
2025-02-14 09:37:03.811 E ....-> Filter
2025-02-14 09:37:03.811 E ........-> Refetch
2025-02-14 09:37:03.811 E ............-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.811 E ................-> Filter
2025-02-14 09:37:03.811 E ....................-> Table "TEST" as "X11" Full Scan
2025-02-14 09:37:03.811 E Select Expression
2025-02-14 09:37:03.811 E ....-> Filter (preliminary)
2025-02-14 09:37:03.811 E ........-> Table "TEST" as "A11" Full Scan
2025-02-14 09:37:03.811 E 4000
2025-02-14 09:37:03.811 E select id,txt_short from test a12 where exists(select 1 from test x12 where txt_short>'' order by id)
2025-02-14 09:37:03.812 E MUST use refetch: column x12.txt_short not present in order by
2025-02-14 09:37:03.812 E Sub-query (invariant)
2025-02-14 09:37:03.812 E ....-> Refetch
2025-02-14 09:37:03.812 E ........-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.812 E ............-> Filter
2025-02-14 09:37:03.812 E ................-> Table "TEST" as "X12" Full Scan
2025-02-14 09:37:03.812 E Select Expression
2025-02-14 09:37:03.812 E ....-> Filter (preliminary)
2025-02-14 09:37:03.812 E ........-> Table "TEST" as "A12" Full Scan
2025-02-14 09:37:03.812 E 4010
2025-02-14 09:37:03.812 E select id,txt_short from test a13 where exists(select 1 from test x13 where computed_id_dup > 0 order by id)
2025-02-14 09:37:03.812 E Must NOT use refetch: ORDER BY list contains the single element: ID, and it is base for x13.computed_id_dup column
2025-02-14 09:37:03.812 E Sub-query (invariant)
2025-02-14 09:37:03.812 E ....-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.812 E ........-> Filter
2025-02-14 09:37:03.812 E ............-> Table "TEST" as "X13" Full Scan
2025-02-14 09:37:03.812 E Select Expression
2025-02-14 09:37:03.812 E ....-> Filter (preliminary)
2025-02-14 09:37:03.812 E ........-> Table "TEST" as "A13" Full Scan
2025-02-14 09:37:03.813 E 4020
2025-02-14 09:37:03.813 E select id,txt_short from test a14 where exists(select 1 from test x14 where computed_id_dup > 0 order by computed_id_dup)
2025-02-14 09:37:03.813 E MUST use refetch! See letter from dimitr 28.12.2020 14:49
2025-02-14 09:37:03.813 E Sort procedure will get:
2025-02-14 09:37:03.813 E a KEY = result of evaluating 'computed_id_dup';
2025-02-14 09:37:03.813 E a VAL = value of the field 'ID' which is base for computing 'computed_id_dup'
2025-02-14 09:37:03.813 E Thus sorter will have a field which not equals to a key, which leads to refetch.
2025-02-14 09:37:03.813 E Sub-query (invariant)
2025-02-14 09:37:03.813 E ....-> Refetch
2025-02-14 09:37:03.813 E ........-> Sort (record length: 36, key length: 12)
2025-02-14 09:37:03.813 E ............-> Filter
2025-02-14 09:37:03.813 E ................-> Table "TEST" as "X14" Full Scan
2025-02-14 09:37:03.813 E Select Expression
2025-02-14 09:37:03.813 E ....-> Filter (preliminary)
2025-02-14 09:37:03.813 E ........-> Table "TEST" as "A14" Full Scan
2025-02-14 09:37:03.813 E 4030
2025-02-14 09:37:03.813 E select id,txt_short from test a15 where exists(select 1 from test x15 where f02>0 and f01>0 order by f01, f02)
2025-02-14 09:37:03.813 E Must NOT use refetch: all persistent columns from WHERE expression (f01, f02) belong to ORDER BY list
2025-02-14 09:37:03.813 E Sub-query (invariant)
2025-02-14 09:37:03.814 E ....-> Sort (record length: 36, key length: 16)
2025-02-14 09:37:03.814 E ........-> Filter
2025-02-14 09:37:03.814 E ............-> Table "TEST" as "X15" Full Scan
2025-02-14 09:37:03.814 E Select Expression
2025-02-14 09:37:03.814 E ....-> Filter (preliminary)
2025-02-14 09:37:03.814 E ........-> Table "TEST" as "A15" Full Scan
2025-02-14 09:37:03.814 E 4040
2025-02-14 09:37:03.814 E select id,txt_short from test a16 where exists(select 1 from test x16 where id>0 and f01>0 order by f01, f02)
2025-02-14 09:37:03.814 E Must use refetch: one of columns from WHERE expr (id) does not belong to ORDER BY list
2025-02-14 09:37:03.814 E Sub-query (invariant)
2025-02-14 09:37:03.814 E ....-> Refetch
2025-02-14 09:37:03.814 E ........-> Sort (record length: 36, key length: 16)
2025-02-14 09:37:03.814 E ............-> Filter
2025-02-14 09:37:03.814 E ................-> Table "TEST" as "X16" Full Scan
2025-02-14 09:37:03.814 E Select Expression
2025-02-14 09:37:03.814 E ....-> Filter (preliminary)
2025-02-14 09:37:03.814 E ........-> Table "TEST" as "A16" Full Scan
2025-02-14 09:37:03.814 E 4050
2025-02-14 09:37:03.814 E select id,txt_short from test a17 where exists(select 1 from test x17 where computed_id_dup > 0 order by f01)
2025-02-14 09:37:03.815 E Must use refetch: computed column in WHERE expr does not belong to ORDER BY list
2025-02-14 09:37:03.815 E Sub-query (invariant)
2025-02-14 09:37:03.815 E ....-> Refetch
2025-02-14 09:37:03.815 E ........-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.815 E ............-> Filter
2025-02-14 09:37:03.815 E ................-> Table "TEST" as "X17" Full Scan
2025-02-14 09:37:03.815 E Select Expression
2025-02-14 09:37:03.815 E ....-> Filter (preliminary)
2025-02-14 09:37:03.815 E ........-> Table "TEST" as "A17" Full Scan
2025-02-14 09:37:03.815 E 4060
2025-02-14 09:37:03.815 E select id,txt_short from test a18 where exists(select 1 from test x18 where computed_guid > '' order by f01)
2025-02-14 09:37:03.815 E Must NOT use refetch: computed column x18.computed_guid does is evaluated via GUID and does not refer to any columns
2025-02-14 09:37:03.815 E Sub-query (invariant)
2025-02-14 09:37:03.815 E ....-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.815 E ........-> Filter
2025-02-14 09:37:03.815 E ............-> Table "TEST" as "X18" Full Scan
2025-02-14 09:37:03.815 E Select Expression
2025-02-14 09:37:03.815 E ....-> Filter (preliminary)
2025-02-14 09:37:03.815 E ........-> Table "TEST" as "A18" Full Scan
2025-02-14 09:37:03.816 E 4070
2025-02-14 09:37:03.816 E with recursive
2025-02-14 09:37:03.816 E r as (
2025-02-14 09:37:03.816 E select a19.id, a19.txt_short
2025-02-14 09:37:03.816 E from test a19
2025-02-14 09:37:03.816 E where not exists(select * from test x where x.txt_short < a19.txt_short order by id)
2025-02-14 09:37:03.816 E UNION ALL
2025-02-14 09:37:03.816 E select i.id, i.txt_short
2025-02-14 09:37:03.816 E from test i
2025-02-14 09:37:03.816 E join r on i.id > r.id
2025-02-14 09:37:03.816 E and not exists( select * from test x where x.txt_short between r.txt_short and i.txt_short order by id )
2025-02-14 09:37:03.816 E )
2025-02-14 09:37:03.816 E select * from r
2025-02-14 09:37:03.816 E MUST use refetch both in anchor and recursive parts
2025-02-14 09:37:03.816 E Sub-query
2025-02-14 09:37:03.816 E ....-> Refetch
2025-02-14 09:37:03.816 E ........-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.816 E ............-> Filter
2025-02-14 09:37:03.816 E ................-> Table "TEST" as "R X" Full Scan
2025-02-14 09:37:03.817 E Sub-query
2025-02-14 09:37:03.817 E ....-> Refetch
2025-02-14 09:37:03.817 E ........-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.817 E ............-> Filter
2025-02-14 09:37:03.817 E ................-> Table "TEST" as "R X" Full Scan
2025-02-14 09:37:03.817 E Select Expression
2025-02-14 09:37:03.817 E ....-> Recursion
2025-02-14 09:37:03.817 E ........-> Filter
2025-02-14 09:37:03.817 E ............-> Table "TEST" as "R A19" Full Scan
2025-02-14 09:37:03.817 E ........-> Filter
2025-02-14 09:37:03.817 E ............-> Table "TEST" as "R I" Full Scan
2025-02-14 09:37:03.817 E 5000
2025-02-14 09:37:03.817 E select txt_broad from v_unioned v01 order by id
2025-02-14 09:37:03.817 E Must NOT use refetch because view DDL includes UNION
2025-02-14 09:37:03.817 E Select Expression
2025-02-14 09:37:03.817 E ....-> Sort (record length: 4044, key length: 8)
2025-02-14 09:37:03.817 E ........-> First N Records
2025-02-14 09:37:03.817 E ............-> Union
2025-02-14 09:37:03.817 E ................-> Table "TEST" as "V01 TEST" Full Scan
2025-02-14 09:37:03.817 E ................-> Table "RDB$DATABASE" as "V01 RDB$DATABASE" Full Scan
2025-02-14 09:37:03.818 E 6000
2025-02-14 09:37:03.818 E select left(txt_broad, 50) as txt from test a21 order by id
2025-02-14 09:37:03.818 E MUST use refetch because expression is based on column which has length >= threshold
2025-02-14 09:37:03.818 E (even if final length of expression result is much less than threshold)
2025-02-14 09:37:03.818 E Select Expression
2025-02-14 09:37:03.818 E ....-> Refetch
2025-02-14 09:37:03.818 E ........-> Sort (record length: 28, key length: 8)
2025-02-14 09:37:03.818 E ............-> Table "TEST" as "A21" Full Scan
2025-02-14 09:37:03.818 E 6010
2025-02-14 09:37:03.818 E select left( txt_short || txt_short, 2000) as txt from test a22 order by id
2025-02-14 09:37:03.818 E Must NOT use refetch because expression is based on column which has length < threshold
2025-02-14 09:37:03.818 E (even if final length of expression result is much bigger than threshold)
2025-02-14 09:37:03.818 E Select Expression
2025-02-14 09:37:03.818 E ....-> Sort (record length: 1036, key length: 8)
2025-02-14 09:37:03.818 E ........-> Table "TEST" as "A22" Full Scan
2025-02-14 09:37:03.818 E 7000
2025-02-14 09:37:03.818 E select * from test_ns_01 a23 order by id
2025-02-14 09:37:03.818 E MUST use refetch
2025-02-14 09:37:03.818 E Select Expression
2025-02-14 09:37:03.819 E ....-> Refetch
2025-02-14 09:37:03.819 E ........-> Sort (record length: 44, key length: 24)
2025-02-14 09:37:03.819 E ............-> Table "TEST_NS_01" as "A23" Full Scan
2025-02-14 09:37:03.819 E 7010
2025-02-14 09:37:03.819 E select * from test_ns_02 a24 order by id
2025-02-14 09:37:03.819 E Must NOT refetch
2025-02-14 09:37:03.819 E Select Expression
2025-02-14 09:37:03.819 E ....-> Sort (record length: 1052, key length: 24)
2025-02-14 09:37:03.819 E ........-> Table "TEST_NS_02" as "A24" Full Scan
2025-02-14 09:37:03.819 E 7020
2025-02-14 09:37:03.819 E select * from test_ns_03 order by id
2025-02-14 09:37:03.819 E MUST use refetch
2025-02-14 09:37:03.819 E Select Expression
2025-02-14 09:37:03.819 E ....-> Refetch
2025-02-14 09:37:03.819 E ........-> Sort (record length: 36, key length: 12)
2025-02-14 09:37:03.819 E ............-> Table "TEST_NS_03" Full Scan
2025-02-14 09:37:03.819 E 7030
2025-02-14 09:37:03.819 E select * from test_ns_04 order by id
2025-02-14 09:37:03.819 E Must NOT use refetch
2025-02-14 09:37:03.820 E Select Expression
2025-02-14 09:37:03.820 E ....-> Sort (record length: 1036, key length: 12)
2025-02-14 09:37:03.820 E ........-> Table "TEST_NS_04" Full Scan
2025-02-14 09:37:03.820 E 7040
2025-02-14 09:37:03.820 E select * from test_ns_05 order by id
2025-02-14 09:37:03.820 E MUST use refetch
2025-02-14 09:37:03.820 E Select Expression
2025-02-14 09:37:03.820 E ....-> Refetch
2025-02-14 09:37:03.820 E ........-> Sort (record length: 36, key length: 12)
2025-02-14 09:37:03.820 E ............-> Table "TEST_NS_05" Full Scan
2025-02-14 09:37:03.820 E 7050
2025-02-14 09:37:03.820 E select * from test_ns_06 order by id
2025-02-14 09:37:03.820 E Must NOT use refetch
2025-02-14 09:37:03.820 E Select Expression
2025-02-14 09:37:03.820 E ....-> Sort (record length: 1036, key length: 12)
2025-02-14 09:37:03.820 E ........-> Table "TEST_NS_06" Full Scan
2025-02-14 09:37:03.820
2025-02-14 09:37:03.820 tests\bugs\core_2650_test.py:1199: AssertionError
2025-02-14 09:37:03.821 ---------------------------- Captured stdout setup ----------------------------
2025-02-14 09:37:03.821 Creating db: localhost:H:\QA\temp\qa2024.tmp\fbqa\test_1442\test.fdb [page_size=None, sql_dialect=None, charset='NONE', user=SYSDBA, password=masterkey]
|
3 #text |
act = <firebird.qa.plugin.Action pytest object at [hex]>
capsys = <_pytest.capture.CaptureFixture pytest object at [hex]>
@pytest.mark.version('>=4.0')
def test_1(act: Action, capsys):
with act.db.connect() as con:
# 13.01.2025: test will FAIL if config parameter OptimizeForFirstRows differs from default value (i.e. is set to true).
# To prevent this, we have to explicitly change appropriate session-level value:
if act.is_version('<5'):
pass
else:
con.execute_immediate('set optimize for all rows')
cur = con.cursor()
for q_idx, q_tuple in query_map.items():
test_sql, qry_comment = q_tuple[:2]
ps = cur.prepare(test_sql)
print(q_idx)
print(test_sql)
print(qry_comment)
print( '\n'.join([replace_leading(s) for s in ps.detailed_plan.split('\n')]) )
ps.free()
act.expected_stdout = fb4x_expected_out if act.is_version('<5') else fb5x_expected_out if act.is_version('<6') else fb6x_expected_out
act.stdout = capsys.readouterr().out
> assert act.clean_stdout == act.clean_expected_stdout
E assert
E 1000
E select txt_short from test a01 order by id
E Must NOT use refetch because length of non-key column is less than threshold
E Select Expression
E ....-> Sort (record length: 1036, key length: 8)
E ........-> Table "TEST" as "A01" Full Scan
E 1010
E select txt_broad from test a02 order by id
E MUST use refetch because length of non-key column is greater than threshold
E Select Expression
E ....-> Refetch
E ........-> Sort (record length: 28, key length: 8)
E ............-> Table "TEST" as "A02" Full Scan
E 1020
E select txt_short from test a03 order by id rows 1
E MUST use refetch regardless on length of column because ROWS <N> presents
E Select Expression
E ....-> First N Records
E ........-> Refetch
E ............-> Sort (record length: 28, key length: 8)
E ................-> Table "TEST" as "A03" Full Scan
E 2000
E select id, computed_ts_dup from test order by id
E Must NOT use refetch because computed column is based on txt_short with length < threshold
E Select Expression
E ....-> Sort (record length: 1036, key length: 8)
E ........-> Table "TEST" Full Scan
E 2010
E select id, computed_tb_dup from test order by id
E MUST use refetch because computed column is based on txt_broad which has length >= threshold
E Select Expression
E ....-> Refetch
E ........-> Sort (record length: 28, key length: 8)
E ............-> Table "TEST" Full Scan
E 3000
E select id from test a04 where '' in (select txt_short from test x04 where txt_short = '' order by id)
E *** not [yet] commented ***
E Sub-query (invariant)
E ....-> Filter
E ........-> Sort (record length: 1036, key length: 8)
E ............-> Filter
E ................-> Table "TEST" as "X04" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A04" Full Scan
E 3010
E select id from test a05 where '' in (select txt_broad from test x05 where txt_broad = '' order by id)
E *** not [yet] commented ***
E Sub-query (invariant)
E ....-> Filter
E ........-> Refetch
E ............-> Sort (record length: 28, key length: 8)
E ................-> Filter
E ....................-> Table "TEST" as "X05" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A05" Full Scan
E 3020
E select id from test a06 where '' not in (select txt_short from test x06 where txt_short>'' order by id)
E *** not [yet] commented ***
E - Sub-query (invariant)
E + Select Expression
E ....-> Sort (record length: 1036, key length: 8)
E ........-> Filter
E ............-> Table "TEST" as "X06" Full Scan
E - Sub-query (invariant)
E + Select Expression
E ....-> Sort (record length: 1036, key length: 8)
E ........-> Filter
E ............-> Table "TEST" as "X06" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A06" Full Scan
E 3030
E select id from test a07 where '' not in (select txt_broad from test x07 where txt_broad>'' order by id)
E *** not [yet] commented ***
E - Sub-query (invariant)
E + Select Expression
E ....-> Refetch
E ........-> Sort (record length: 28, key length: 8)
E ............-> Filter
E ................-> Table "TEST" as "X07" Full Scan
E - Sub-query (invariant)
E + Select Expression
E ....-> Refetch
E ........-> Sort (record length: 28, key length: 8)
E ............-> Filter
E ................-> Table "TEST" as "X07" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A07" Full Scan
E 3040
E select id from test a08 where '' > all (select id from test x08 where txt_short>'' order by id)
E *** not [yet] commented ***
E Sub-query (invariant)
E ....-> Filter
E ........-> Sort (record length: 1036, key length: 8)
E ............-> Filter
E ................-> Table "TEST" as "X08" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A08" Full Scan
E 3050
E select id from test a09 where '' > all (select id from test x09 where txt_broad>'' order by id)
E *** not [yet] commented ***
E Sub-query (invariant)
E ....-> Filter
E ........-> Refetch
E ............-> Sort (record length: 28, key length: 8)
E ................-> Filter
E ....................-> Table "TEST" as "X09" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A09" Full Scan
E 3060
E select id from test a10 where '' <> any (select id from test x10 where txt_short>'' order by id)
E *** not [yet] commented ***
E Sub-query (invariant)
E ....-> Filter
E ........-> Sort (record length: 1036, key length: 8)
E ............-> Filter
E ................-> Table "TEST" as "X10" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A10" Full Scan
E 3070
E select id from test a11 where '' <> any (select id from test x11 where txt_broad>'' order by id)
E *** not [yet] commented ***
E Sub-query (invariant)
E ....-> Filter
E ........-> Refetch
E ............-> Sort (record length: 28, key length: 8)
E ................-> Filter
E ....................-> Table "TEST" as "X11" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A11" Full Scan
E 4000
E select id,txt_short from test a12 where exists(select 1 from test x12 where txt_short>'' order by id)
E MUST use refetch: column x12.txt_short not present in order by
E Sub-query (invariant)
E ....-> Refetch
E ........-> Sort (record length: 28, key length: 8)
E ............-> Filter
E ................-> Table "TEST" as "X12" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A12" Full Scan
E 4010
E select id,txt_short from test a13 where exists(select 1 from test x13 where computed_id_dup > 0 order by id)
E Must NOT use refetch: ORDER BY list contains the single element: ID, and it is base for x13.computed_id_dup column
E Sub-query (invariant)
E ....-> Sort (record length: 28, key length: 8)
E ........-> Filter
E ............-> Table "TEST" as "X13" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A13" Full Scan
E 4020
E select id,txt_short from test a14 where exists(select 1 from test x14 where computed_id_dup > 0 order by computed_id_dup)
E MUST use refetch! See letter from dimitr 28.12.2020 14:49
E Sort procedure will get:
E a KEY = result of evaluating 'computed_id_dup';
E a VAL = value of the field 'ID' which is base for computing 'computed_id_dup'
E Thus sorter will have a field which not equals to a key, which leads to refetch.
E Sub-query (invariant)
E ....-> Refetch
E ........-> Sort (record length: 36, key length: 12)
E ............-> Filter
E ................-> Table "TEST" as "X14" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A14" Full Scan
E 4030
E select id,txt_short from test a15 where exists(select 1 from test x15 where f02>0 and f01>0 order by f01, f02)
E Must NOT use refetch: all persistent columns from WHERE expression (f01, f02) belong to ORDER BY list
E Sub-query (invariant)
E ....-> Sort (record length: 36, key length: 16)
E ........-> Filter
E ............-> Table "TEST" as "X15" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A15" Full Scan
E 4040
E select id,txt_short from test a16 where exists(select 1 from test x16 where id>0 and f01>0 order by f01, f02)
E Must use refetch: one of columns from WHERE expr (id) does not belong to ORDER BY list
E Sub-query (invariant)
E ....-> Refetch
E ........-> Sort (record length: 36, key length: 16)
E ............-> Filter
E ................-> Table "TEST" as "X16" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A16" Full Scan
E 4050
E select id,txt_short from test a17 where exists(select 1 from test x17 where computed_id_dup > 0 order by f01)
E Must use refetch: computed column in WHERE expr does not belong to ORDER BY list
E Sub-query (invariant)
E ....-> Refetch
E ........-> Sort (record length: 28, key length: 8)
E ............-> Filter
E ................-> Table "TEST" as "X17" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A17" Full Scan
E 4060
E select id,txt_short from test a18 where exists(select 1 from test x18 where computed_guid > '' order by f01)
E Must NOT use refetch: computed column x18.computed_guid does is evaluated via GUID and does not refer to any columns
E Sub-query (invariant)
E ....-> Sort (record length: 28, key length: 8)
E ........-> Filter
E ............-> Table "TEST" as "X18" Full Scan
E Select Expression
E ....-> Filter (preliminary)
E ........-> Table "TEST" as "A18" Full Scan
E 4070
E with recursive
E r as (
E select a19.id, a19.txt_short
E from test a19
E where not exists(select * from test x where x.txt_short < a19.txt_short order by id)
E UNION ALL
E select i.id, i.txt_short
E from test i
E join r on i.id > r.id
E and not exists( select * from test x where x.txt_short between r.txt_short and i.txt_short order by id )
E )
E select * from r
E MUST use refetch both in anchor and recursive parts
E Sub-query
E ....-> Refetch
E ........-> Sort (record length: 28, key length: 8)
E ............-> Filter
E ................-> Table "TEST" as "R X" Full Scan
E Sub-query
E ....-> Refetch
E ........-> Sort (record length: 28, key length: 8)
E ............-> Filter
E ................-> Table "TEST" as "R X" Full Scan
E Select Expression
E ....-> Recursion
E ........-> Filter
E ............-> Table "TEST" as "R A19" Full Scan
E ........-> Filter
E ............-> Table "TEST" as "R I" Full Scan
E 5000
E select txt_broad from v_unioned v01 order by id
E Must NOT use refetch because view DDL includes UNION
E Select Expression
E ....-> Sort (record length: 4044, key length: 8)
E ........-> First N Records
E ............-> Union
E ................-> Table "TEST" as "V01 TEST" Full Scan
E ................-> Table "RDB$DATABASE" as "V01 RDB$DATABASE" Full Scan
E 6000
E select left(txt_broad, 50) as txt from test a21 order by id
E MUST use refetch because expression is based on column which has length >= threshold
E (even if final length of expression result is much less than threshold)
E Select Expression
E ....-> Refetch
E ........-> Sort (record length: 28, key length: 8)
E ............-> Table "TEST" as "A21" Full Scan
E 6010
E select left( txt_short || txt_short, 2000) as txt from test a22 order by id
E Must NOT use refetch because expression is based on column which has length < threshold
E (even if final length of expression result is much bigger than threshold)
E Select Expression
E ....-> Sort (record length: 1036, key length: 8)
E ........-> Table "TEST" as "A22" Full Scan
E 7000
E select * from test_ns_01 a23 order by id
E MUST use refetch
E Select Expression
E ....-> Refetch
E ........-> Sort (record length: 44, key length: 24)
E ............-> Table "TEST_NS_01" as "A23" Full Scan
E 7010
E select * from test_ns_02 a24 order by id
E Must NOT refetch
E Select Expression
E ....-> Sort (record length: 1052, key length: 24)
E ........-> Table "TEST_NS_02" as "A24" Full Scan
E 7020
E select * from test_ns_03 order by id
E MUST use refetch
E Select Expression
E ....-> Refetch
E ........-> Sort (record length: 36, key length: 12)
E ............-> Table "TEST_NS_03" Full Scan
E 7030
E select * from test_ns_04 order by id
E Must NOT use refetch
E Select Expression
E ....-> Sort (record length: 1036, key length: 12)
E ........-> Table "TEST_NS_04" Full Scan
E 7040
E select * from test_ns_05 order by id
E MUST use refetch
E Select Expression
E ....-> Refetch
E ........-> Sort (record length: 36, key length: 12)
E ............-> Table "TEST_NS_05" Full Scan
E 7050
E select * from test_ns_06 order by id
E Must NOT use refetch
E Select Expression
E ....-> Sort (record length: 1036, key length: 12)
E ........-> Table "TEST_NS_06" Full Scan
tests\bugs\core_2650_test.py:1199: AssertionError
|