6
0
mirror of https://github.com/FirebirdSQL/firebird-qa.git synced 2025-01-22 21:43:06 +01:00
firebird-qa/tests/bugs/core_2176_test.py

322 lines
11 KiB
Python

#coding:utf-8
"""
ID: issue-2607
ISSUE: 2607
TITLE: Unexpected (wrong) results with COALESCE and GROUP BY
DESCRIPTION:
JIRA: CORE-2176
FBTEST: bugs.core_2176
"""
import pytest
from firebird.qa import *
db = db_factory()
test_script = """
create or alter view v_rel (rid, rnm, rty) as
select r.rdb$relation_id, r.rdb$relation_name, r.rdb$relation_type
from rdb$relations r
where r.rdb$relation_id <= 30 -- ::: NB ::: added this cond because number of rows in 2.5 and 3.0 differ!
;
commit;
set count on ;
set list on;
select rid as c from v_rel
group by 1 ;
-- correct result
select * from (
select rid as c from v_rel
) group by 1 ;
-- also correct
select coalesce(rid, 0) as c from v_rel
group by 1 ;
-- ERROR: no zero ID is reported, the last ID is reported twice
select * from (
select coalesce(rid, 0) as c from v_rel
) group by 1 ;
-- ERROR: single NULL is returned
select * from (
select coalesce(rid, 0) as a, coalesce(rty, 0) as b from v_rel
) group by 1, 2 ;
-- ERROR: infinite result set with all zero values
select * from (
select coalesce(rid, 0) as a, coalesce(rnm, '') as b from v_rel
) group by 1, 2 ;
-- ERROR: conversion error
"""
act = isql_act('db', test_script)
expected_stdout = """
C 0
C 1
C 2
C 3
C 4
C 5
C 6
C 7
C 8
C 9
C 10
C 11
C 12
C 13
C 14
C 15
C 16
C 17
C 18
C 19
C 20
C 21
C 22
C 23
C 24
C 25
C 26
C 27
C 28
C 29
C 30
Records affected: 31
C 0
C 1
C 2
C 3
C 4
C 5
C 6
C 7
C 8
C 9
C 10
C 11
C 12
C 13
C 14
C 15
C 16
C 17
C 18
C 19
C 20
C 21
C 22
C 23
C 24
C 25
C 26
C 27
C 28
C 29
C 30
Records affected: 31
C 0
C 1
C 2
C 3
C 4
C 5
C 6
C 7
C 8
C 9
C 10
C 11
C 12
C 13
C 14
C 15
C 16
C 17
C 18
C 19
C 20
C 21
C 22
C 23
C 24
C 25
C 26
C 27
C 28
C 29
C 30
Records affected: 31
C 0
C 1
C 2
C 3
C 4
C 5
C 6
C 7
C 8
C 9
C 10
C 11
C 12
C 13
C 14
C 15
C 16
C 17
C 18
C 19
C 20
C 21
C 22
C 23
C 24
C 25
C 26
C 27
C 28
C 29
C 30
Records affected: 31
A 0
B 0
A 1
B 0
A 2
B 0
A 3
B 0
A 4
B 0
A 5
B 0
A 6
B 0
A 7
B 0
A 8
B 0
A 9
B 0
A 10
B 0
A 11
B 0
A 12
B 0
A 13
B 0
A 14
B 0
A 15
B 0
A 16
B 0
A 17
B 0
A 18
B 0
A 19
B 0
A 20
B 0
A 21
B 0
A 22
B 0
A 23
B 0
A 24
B 0
A 25
B 0
A 26
B 0
A 27
B 0
A 28
B 0
A 29
B 0
A 30
B 0
Records affected: 31
A 0
B RDB$PAGES
A 1
B RDB$DATABASE
A 2
B RDB$FIELDS
A 3
B RDB$INDEX_SEGMENTS
A 4
B RDB$INDICES
A 5
B RDB$RELATION_FIELDS
A 6
B RDB$RELATIONS
A 7
B RDB$VIEW_RELATIONS
A 8
B RDB$FORMATS
A 9
B RDB$SECURITY_CLASSES
A 10
B RDB$FILES
A 11
B RDB$TYPES
A 12
B RDB$TRIGGERS
A 13
B RDB$DEPENDENCIES
A 14
B RDB$FUNCTIONS
A 15
B RDB$FUNCTION_ARGUMENTS
A 16
B RDB$FILTERS
A 17
B RDB$TRIGGER_MESSAGES
A 18
B RDB$USER_PRIVILEGES
A 19
B RDB$TRANSACTIONS
A 20
B RDB$GENERATORS
A 21
B RDB$FIELD_DIMENSIONS
A 22
B RDB$RELATION_CONSTRAINTS
A 23
B RDB$REF_CONSTRAINTS
A 24
B RDB$CHECK_CONSTRAINTS
A 25
B RDB$LOG_FILES
A 26
B RDB$PROCEDURES
A 27
B RDB$PROCEDURE_PARAMETERS
A 28
B RDB$CHARACTER_SETS
A 29
B RDB$COLLATIONS
A 30
B RDB$EXCEPTIONS
Records affected: 31
"""
@pytest.mark.version('>=3.0')
def test_1(act: Action):
act.expected_stdout = expected_stdout
act.execute()
assert act.clean_stdout == act.clean_expected_stdout