2 @message |
assert
select * from test where 5000 in (x, y)
Select Expression
....-> Filter
........-> Table "TEST" Access By ID
............-> Bitmap Or
................-> Bitmap
+ ....................-> Index "TEST_Y_ASC" Range Scan (full match)
+ ................-> Bitmap
....................-> Index "TEST_X_ASC" Range Scan (full match)
+ select * from test where 5000 in (u, v)
+ Select Expression
+ ....-> Filter
+ ........-> Table "TEST" Access By ID
+ ............-> Bitmap Or
................-> Bitmap
- ....................-> Index "TEST_Y_ASC" Range Scan (full match)
+ ....................-> Index "TEST_V_DEC" Range Scan (full match)
+ ................-> Bitmap
+ ....................-> Index "TEST_U_DEC" Range Scan (full match)
- select * from test where 5000 in (u, v)
+ select * from test where 5000 in (x, u)
Select Expression
....-> Filter
........-> Table "TEST" Access By ID
............-> Bitmap Or
................-> Bitmap
....................-> Index "TEST_U_DEC" Range Scan (full match)
................-> Bitmap
- ....................-> Index "TEST_V_DEC" Range Scan (full match)
- select * from test where 5000 in (x, u)
- Select Expression
- ....-> Filter
- ........-> Table "TEST" Access By ID
- ............-> Bitmap Or
- ................-> Bitmap
....................-> Index "TEST_X_ASC" Range Scan (full match)
- ................-> Bitmap
- ....................-> Index "TEST_U_DEC" Range Scan (full match)
select * from test where 5000 in (v, y)
Select Expression
....-> Filter
........-> Table "TEST" Access By ID
............-> Bitmap Or
................-> Bitmap
+ ....................-> Index "TEST_Y_ASC" Range Scan (full match)
+ ................-> Bitmap
....................-> Index "TEST_V_DEC" Range Scan (full match)
- ................-> Bitmap
- ....................-> Index "TEST_Y_ASC" Range Scan (full match)
select * from test where 5000 in (x+y, u-v)
Select Expression
....-> Filter
+ ........-> Table "TEST" Full Scan
- ........-> Table "TEST" Access By ID
- ............-> Bitmap Or
- ................-> Bitmap
- ....................-> Index "TEST_C_ASC" Range Scan (full match)
- ................-> Bitmap
- ....................-> Index "TEST_C_DEC" Range Scan (full match)
select * from test where 5000 in (p, q) and p < 5001 and q > 4999
Select Expression
....-> Filter
........-> Table "TEST" Access By ID
............-> Bitmap Or
................-> Bitmap
+ ....................-> Index "TEST_Q_ASC" Range Scan (full match)
+ ................-> Bitmap
....................-> Index "TEST_P_ASC" Range Scan (full match)
- ................-> Bitmap
- ....................-> Index "TEST_Q_ASC" Range Scan (full match)
select * from test where 5000 in (p, q) and p > 4999 and q < 5001
Select Expression
....-> Filter
........-> Table "TEST" Access By ID
............-> Bitmap Or
................-> Bitmap
+ ....................-> Index "TEST_Q_DEC" Range Scan (full match)
+ ................-> Bitmap
....................-> Index "TEST_P_DEC" Range Scan (full match)
- ................-> Bitmap
- ....................-> Index "TEST_Q_DEC" Range Scan (full match)
LOG DETAILS:
2025-02-14 09:37:03.826
2025-02-14 09:37:03.827 act = <firebird.qa.plugin.Action object at [hex]>
2025-02-14 09:37:03.827 capsys = <_pytest.capture.CaptureFixture object at [hex]>
2025-02-14 09:37:03.827
2025-02-14 09:37:03.827 @pytest.mark.version('>=5.0.2')
2025-02-14 09:37:03.827 def test_1(act: Action, capsys):
2025-02-14 09:37:03.827 queries_map = { i : x for i,x in enumerate
2025-02-14 09:37:03.827 (
2025-02-14 09:37:03.827 [
2025-02-14 09:37:03.827 'select * from test where 5000 in (x, y)'
2025-02-14 09:37:03.827 ,'select * from test where 5000 in (u, v)'
2025-02-14 09:37:03.827 ,'select * from test where 5000 in (x, u)'
2025-02-14 09:37:03.827 ,'select * from test where 5000 in (v, y)'
2025-02-14 09:37:03.827 ,'select * from test where 5000 in (x+y, u-v)'
2025-02-14 09:37:03.827 ,'select * from test where 5000 in (p, q) and p < 5001 and q > 4999'
2025-02-14 09:37:03.827 ,'select * from test where 5000 in (p, q) and p > 4999 and q < 5001'
2025-02-14 09:37:03.827 ]
2025-02-14 09:37:03.827 )
2025-02-14 09:37:03.827 }
2025-02-14 09:37:03.827 with act.db.connect() as con:
2025-02-14 09:37:03.828 cur = con.cursor()
2025-02-14 09:37:03.828 for qry_idx, qry_txt in queries_map.items():
2025-02-14 09:37:03.828 ps = None
2025-02-14 09:37:03.828 try:
2025-02-14 09:37:03.828 ps = cur.prepare(qry_txt)
2025-02-14 09:37:03.828
2025-02-14 09:37:03.828 # Print explained plan with padding eash line by dots in order to see indentations:
2025-02-14 09:37:03.828 print(qry_txt)
2025-02-14 09:37:03.828 print( '\n'.join([replace_leading(s) for s in ps.detailed_plan.split('\n')]) )
2025-02-14 09:37:03.828 print('\n')
2025-02-14 09:37:03.828 except DatabaseError as e:
2025-02-14 09:37:03.828 print(e.__str__())
2025-02-14 09:37:03.828 print(e.gds_codes)
2025-02-14 09:37:03.828 finally:
2025-02-14 09:37:03.828 if ps:
2025-02-14 09:37:03.828 ps.free()
2025-02-14 09:37:03.828
2025-02-14 09:37:03.828
2025-02-14 09:37:03.828 expected_stdout = f"""
2025-02-14 09:37:03.828 {queries_map[ 0 ]}
2025-02-14 09:37:03.829 Select Expression
2025-02-14 09:37:03.829 ....-> Filter
2025-02-14 09:37:03.829 ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.829 ............-> Bitmap Or
2025-02-14 09:37:03.829 ................-> Bitmap
2025-02-14 09:37:03.829 ....................-> Index "TEST_X_ASC" Range Scan (full match)
2025-02-14 09:37:03.829 ................-> Bitmap
2025-02-14 09:37:03.829 ....................-> Index "TEST_Y_ASC" Range Scan (full match)
2025-02-14 09:37:03.829
2025-02-14 09:37:03.829 {queries_map[ 1 ]}
2025-02-14 09:37:03.829 Select Expression
2025-02-14 09:37:03.829 ....-> Filter
2025-02-14 09:37:03.829 ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.829 ............-> Bitmap Or
2025-02-14 09:37:03.829 ................-> Bitmap
2025-02-14 09:37:03.829 ....................-> Index "TEST_U_DEC" Range Scan (full match)
2025-02-14 09:37:03.829 ................-> Bitmap
2025-02-14 09:37:03.830 ....................-> Index "TEST_V_DEC" Range Scan (full match)
2025-02-14 09:37:03.830
2025-02-14 09:37:03.830 {queries_map[ 2 ]}
2025-02-14 09:37:03.830 Select Expression
2025-02-14 09:37:03.830 ....-> Filter
2025-02-14 09:37:03.830 ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.830 ............-> Bitmap Or
2025-02-14 09:37:03.830 ................-> Bitmap
2025-02-14 09:37:03.830 ....................-> Index "TEST_X_ASC" Range Scan (full match)
2025-02-14 09:37:03.830 ................-> Bitmap
2025-02-14 09:37:03.830 ....................-> Index "TEST_U_DEC" Range Scan (full match)
2025-02-14 09:37:03.830
2025-02-14 09:37:03.830 {queries_map[ 3 ]}
2025-02-14 09:37:03.830 Select Expression
2025-02-14 09:37:03.830 ....-> Filter
2025-02-14 09:37:03.830 ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.830 ............-> Bitmap Or
2025-02-14 09:37:03.830 ................-> Bitmap
2025-02-14 09:37:03.830 ....................-> Index "TEST_V_DEC" Range Scan (full match)
2025-02-14 09:37:03.830 ................-> Bitmap
2025-02-14 09:37:03.831 ....................-> Index "TEST_Y_ASC" Range Scan (full match)
2025-02-14 09:37:03.831
2025-02-14 09:37:03.831 {queries_map[ 4 ]}
2025-02-14 09:37:03.831 Select Expression
2025-02-14 09:37:03.831 ....-> Filter
2025-02-14 09:37:03.831 ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.831 ............-> Bitmap Or
2025-02-14 09:37:03.831 ................-> Bitmap
2025-02-14 09:37:03.831 ....................-> Index "TEST_C_ASC" Range Scan (full match)
2025-02-14 09:37:03.831 ................-> Bitmap
2025-02-14 09:37:03.831 ....................-> Index "TEST_C_DEC" Range Scan (full match)
2025-02-14 09:37:03.831
2025-02-14 09:37:03.831 {queries_map[ 5 ]}
2025-02-14 09:37:03.831 Select Expression
2025-02-14 09:37:03.831 ....-> Filter
2025-02-14 09:37:03.831 ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.831 ............-> Bitmap Or
2025-02-14 09:37:03.831 ................-> Bitmap
2025-02-14 09:37:03.831 ....................-> Index "TEST_P_ASC" Range Scan (full match)
2025-02-14 09:37:03.832 ................-> Bitmap
2025-02-14 09:37:03.832 ....................-> Index "TEST_Q_ASC" Range Scan (full match)
2025-02-14 09:37:03.832
2025-02-14 09:37:03.832 {queries_map[ 6 ]}
2025-02-14 09:37:03.832 Select Expression
2025-02-14 09:37:03.832 ....-> Filter
2025-02-14 09:37:03.832 ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.832 ............-> Bitmap Or
2025-02-14 09:37:03.832 ................-> Bitmap
2025-02-14 09:37:03.832 ....................-> Index "TEST_P_DEC" Range Scan (full match)
2025-02-14 09:37:03.832 ................-> Bitmap
2025-02-14 09:37:03.832 ....................-> Index "TEST_Q_DEC" Range Scan (full match)
2025-02-14 09:37:03.832 """
2025-02-14 09:37:03.832
2025-02-14 09:37:03.832 act.expected_stdout = expected_stdout
2025-02-14 09:37:03.832 act.stdout = capsys.readouterr().out
2025-02-14 09:37:03.832 > assert act.clean_stdout == act.clean_expected_stdout
2025-02-14 09:37:03.832 E assert
2025-02-14 09:37:03.832 E select * from test where 5000 in (x, y)
2025-02-14 09:37:03.833 E Select Expression
2025-02-14 09:37:03.833 E ....-> Filter
2025-02-14 09:37:03.833 E ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.833 E ............-> Bitmap Or
2025-02-14 09:37:03.833 E ................-> Bitmap
2025-02-14 09:37:03.833 E + ....................-> Index "TEST_Y_ASC" Range Scan (full match)
2025-02-14 09:37:03.833 E + ................-> Bitmap
2025-02-14 09:37:03.833 E ....................-> Index "TEST_X_ASC" Range Scan (full match)
2025-02-14 09:37:03.833 E + select * from test where 5000 in (u, v)
2025-02-14 09:37:03.833 E + Select Expression
2025-02-14 09:37:03.833 E + ....-> Filter
2025-02-14 09:37:03.833 E + ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.833 E + ............-> Bitmap Or
2025-02-14 09:37:03.833 E ................-> Bitmap
2025-02-14 09:37:03.833 E - ....................-> Index "TEST_Y_ASC" Range Scan (full match)
2025-02-14 09:37:03.833 E + ....................-> Index "TEST_V_DEC" Range Scan (full match)
2025-02-14 09:37:03.833 E + ................-> Bitmap
2025-02-14 09:37:03.834 E + ....................-> Index "TEST_U_DEC" Range Scan (full match)
2025-02-14 09:37:03.834 E - select * from test where 5000 in (u, v)
2025-02-14 09:37:03.834 E + select * from test where 5000 in (x, u)
2025-02-14 09:37:03.834 E Select Expression
2025-02-14 09:37:03.834 E ....-> Filter
2025-02-14 09:37:03.834 E ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.834 E ............-> Bitmap Or
2025-02-14 09:37:03.834 E ................-> Bitmap
2025-02-14 09:37:03.834 E ....................-> Index "TEST_U_DEC" Range Scan (full match)
2025-02-14 09:37:03.834 E ................-> Bitmap
2025-02-14 09:37:03.834 E - ....................-> Index "TEST_V_DEC" Range Scan (full match)
2025-02-14 09:37:03.834 E - select * from test where 5000 in (x, u)
2025-02-14 09:37:03.834 E - Select Expression
2025-02-14 09:37:03.834 E - ....-> Filter
2025-02-14 09:37:03.834 E - ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.834 E - ............-> Bitmap Or
2025-02-14 09:37:03.834 E - ................-> Bitmap
2025-02-14 09:37:03.834 E ....................-> Index "TEST_X_ASC" Range Scan (full match)
2025-02-14 09:37:03.835 E - ................-> Bitmap
2025-02-14 09:37:03.835 E - ....................-> Index "TEST_U_DEC" Range Scan (full match)
2025-02-14 09:37:03.835 E select * from test where 5000 in (v, y)
2025-02-14 09:37:03.835 E Select Expression
2025-02-14 09:37:03.835 E ....-> Filter
2025-02-14 09:37:03.835 E ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.835 E ............-> Bitmap Or
2025-02-14 09:37:03.835 E ................-> Bitmap
2025-02-14 09:37:03.835 E + ....................-> Index "TEST_Y_ASC" Range Scan (full match)
2025-02-14 09:37:03.835 E + ................-> Bitmap
2025-02-14 09:37:03.835 E ....................-> Index "TEST_V_DEC" Range Scan (full match)
2025-02-14 09:37:03.835 E - ................-> Bitmap
2025-02-14 09:37:03.835 E - ....................-> Index "TEST_Y_ASC" Range Scan (full match)
2025-02-14 09:37:03.835 E select * from test where 5000 in (x+y, u-v)
2025-02-14 09:37:03.835 E Select Expression
2025-02-14 09:37:03.835 E ....-> Filter
2025-02-14 09:37:03.835 E + ........-> Table "TEST" Full Scan
2025-02-14 09:37:03.835 E - ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.835 E - ............-> Bitmap Or
2025-02-14 09:37:03.836 E - ................-> Bitmap
2025-02-14 09:37:03.836 E - ....................-> Index "TEST_C_ASC" Range Scan (full match)
2025-02-14 09:37:03.836 E - ................-> Bitmap
2025-02-14 09:37:03.836 E - ....................-> Index "TEST_C_DEC" Range Scan (full match)
2025-02-14 09:37:03.836 E select * from test where 5000 in (p, q) and p < 5001 and q > 4999
2025-02-14 09:37:03.836 E Select Expression
2025-02-14 09:37:03.836 E ....-> Filter
2025-02-14 09:37:03.836 E ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.836 E ............-> Bitmap Or
2025-02-14 09:37:03.836 E ................-> Bitmap
2025-02-14 09:37:03.836 E + ....................-> Index "TEST_Q_ASC" Range Scan (full match)
2025-02-14 09:37:03.836 E + ................-> Bitmap
2025-02-14 09:37:03.836 E ....................-> Index "TEST_P_ASC" Range Scan (full match)
2025-02-14 09:37:03.836 E - ................-> Bitmap
2025-02-14 09:37:03.836 E - ....................-> Index "TEST_Q_ASC" Range Scan (full match)
2025-02-14 09:37:03.836 E select * from test where 5000 in (p, q) and p > 4999 and q < 5001
2025-02-14 09:37:03.836 E Select Expression
2025-02-14 09:37:03.836 E ....-> Filter
2025-02-14 09:37:03.836 E ........-> Table "TEST" Access By ID
2025-02-14 09:37:03.837 E ............-> Bitmap Or
2025-02-14 09:37:03.837 E ................-> Bitmap
2025-02-14 09:37:03.837 E + ....................-> Index "TEST_Q_DEC" Range Scan (full match)
2025-02-14 09:37:03.837 E + ................-> Bitmap
2025-02-14 09:37:03.837 E ....................-> Index "TEST_P_DEC" Range Scan (full match)
2025-02-14 09:37:03.837 E - ................-> Bitmap
2025-02-14 09:37:03.837 E - ....................-> Index "TEST_Q_DEC" Range Scan (full match)
2025-02-14 09:37:03.837
2025-02-14 09:37:03.837 tests\bugs\gh_8109_test.py:155: AssertionError
2025-02-14 09:37:03.837 ---------------------------- Captured stdout setup ----------------------------
2025-02-14 09:37:03.837 Creating db: localhost:H:\QA\temp\qa2024.tmp\fbqa\test_11668\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('>=5.0.2')
def test_1(act: Action, capsys):
queries_map = { i : x for i,x in enumerate
(
[
'select * from test where 5000 in (x, y)'
,'select * from test where 5000 in (u, v)'
,'select * from test where 5000 in (x, u)'
,'select * from test where 5000 in (v, y)'
,'select * from test where 5000 in (x+y, u-v)'
,'select * from test where 5000 in (p, q) and p < 5001 and q > 4999'
,'select * from test where 5000 in (p, q) and p > 4999 and q < 5001'
]
)
}
with act.db.connect() as con:
cur = con.cursor()
for qry_idx, qry_txt in queries_map.items():
ps = None
try:
ps = cur.prepare(qry_txt)
# Print explained plan with padding eash line by dots in order to see indentations:
print(qry_txt)
print( '\n'.join([replace_leading(s) for s in ps.detailed_plan.split('\n')]) )
print('\n')
except DatabaseError as e:
print(e.__str__())
print(e.gds_codes)
finally:
if ps:
ps.free()
expected_stdout = f"""
{queries_map[ 0 ]}
Select Expression
....-> Filter
........-> Table "TEST" Access By ID
............-> Bitmap Or
................-> Bitmap
....................-> Index "TEST_X_ASC" Range Scan (full match)
................-> Bitmap
....................-> Index "TEST_Y_ASC" Range Scan (full match)
{queries_map[ 1 ]}
Select Expression
....-> Filter
........-> Table "TEST" Access By ID
............-> Bitmap Or
................-> Bitmap
....................-> Index "TEST_U_DEC" Range Scan (full match)
................-> Bitmap
....................-> Index "TEST_V_DEC" Range Scan (full match)
{queries_map[ 2 ]}
Select Expression
....-> Filter
........-> Table "TEST" Access By ID
............-> Bitmap Or
................-> Bitmap
....................-> Index "TEST_X_ASC" Range Scan (full match)
................-> Bitmap
....................-> Index "TEST_U_DEC" Range Scan (full match)
{queries_map[ 3 ]}
Select Expression
....-> Filter
........-> Table "TEST" Access By ID
............-> Bitmap Or
................-> Bitmap
....................-> Index "TEST_V_DEC" Range Scan (full match)
................-> Bitmap
....................-> Index "TEST_Y_ASC" Range Scan (full match)
{queries_map[ 4 ]}
Select Expression
....-> Filter
........-> Table "TEST" Access By ID
............-> Bitmap Or
................-> Bitmap
....................-> Index "TEST_C_ASC" Range Scan (full match)
................-> Bitmap
....................-> Index "TEST_C_DEC" Range Scan (full match)
{queries_map[ 5 ]}
Select Expression
....-> Filter
........-> Table "TEST" Access By ID
............-> Bitmap Or
................-> Bitmap
....................-> Index "TEST_P_ASC" Range Scan (full match)
................-> Bitmap
....................-> Index "TEST_Q_ASC" Range Scan (full match)
{queries_map[ 6 ]}
Select Expression
....-> Filter
........-> Table "TEST" Access By ID
............-> Bitmap Or
................-> Bitmap
....................-> Index "TEST_P_DEC" Range Scan (full match)
................-> Bitmap
....................-> Index "TEST_Q_DEC" Range Scan (full match)
"""
act.expected_stdout = expected_stdout
act.stdout = capsys.readouterr().out
> assert act.clean_stdout == act.clean_expected_stdout
E assert
E select * from test where 5000 in (x, y)
E Select Expression
E ....-> Filter
E ........-> Table "TEST" Access By ID
E ............-> Bitmap Or
E ................-> Bitmap
E + ....................-> Index "TEST_Y_ASC" Range Scan (full match)
E + ................-> Bitmap
E ....................-> Index "TEST_X_ASC" Range Scan (full match)
E + select * from test where 5000 in (u, v)
E + Select Expression
E + ....-> Filter
E + ........-> Table "TEST" Access By ID
E + ............-> Bitmap Or
E ................-> Bitmap
E - ....................-> Index "TEST_Y_ASC" Range Scan (full match)
E + ....................-> Index "TEST_V_DEC" Range Scan (full match)
E + ................-> Bitmap
E + ....................-> Index "TEST_U_DEC" Range Scan (full match)
E - select * from test where 5000 in (u, v)
E + select * from test where 5000 in (x, u)
E Select Expression
E ....-> Filter
E ........-> Table "TEST" Access By ID
E ............-> Bitmap Or
E ................-> Bitmap
E ....................-> Index "TEST_U_DEC" Range Scan (full match)
E ................-> Bitmap
E - ....................-> Index "TEST_V_DEC" Range Scan (full match)
E - select * from test where 5000 in (x, u)
E - Select Expression
E - ....-> Filter
E - ........-> Table "TEST" Access By ID
E - ............-> Bitmap Or
E - ................-> Bitmap
E ....................-> Index "TEST_X_ASC" Range Scan (full match)
E - ................-> Bitmap
E - ....................-> Index "TEST_U_DEC" Range Scan (full match)
E select * from test where 5000 in (v, y)
E Select Expression
E ....-> Filter
E ........-> Table "TEST" Access By ID
E ............-> Bitmap Or
E ................-> Bitmap
E + ....................-> Index "TEST_Y_ASC" Range Scan (full match)
E + ................-> Bitmap
E ....................-> Index "TEST_V_DEC" Range Scan (full match)
E - ................-> Bitmap
E - ....................-> Index "TEST_Y_ASC" Range Scan (full match)
E select * from test where 5000 in (x+y, u-v)
E Select Expression
E ....-> Filter
E + ........-> Table "TEST" Full Scan
E - ........-> Table "TEST" Access By ID
E - ............-> Bitmap Or
E - ................-> Bitmap
E - ....................-> Index "TEST_C_ASC" Range Scan (full match)
E - ................-> Bitmap
E - ....................-> Index "TEST_C_DEC" Range Scan (full match)
E select * from test where 5000 in (p, q) and p < 5001 and q > 4999
E Select Expression
E ....-> Filter
E ........-> Table "TEST" Access By ID
E ............-> Bitmap Or
E ................-> Bitmap
E + ....................-> Index "TEST_Q_ASC" Range Scan (full match)
E + ................-> Bitmap
E ....................-> Index "TEST_P_ASC" Range Scan (full match)
E - ................-> Bitmap
E - ....................-> Index "TEST_Q_ASC" Range Scan (full match)
E select * from test where 5000 in (p, q) and p > 4999 and q < 5001
E Select Expression
E ....-> Filter
E ........-> Table "TEST" Access By ID
E ............-> Bitmap Or
E ................-> Bitmap
E + ....................-> Index "TEST_Q_DEC" Range Scan (full match)
E + ................-> Bitmap
E ....................-> Index "TEST_P_DEC" Range Scan (full match)
E - ................-> Bitmap
E - ....................-> Index "TEST_Q_DEC" Range Scan (full match)
tests\bugs\gh_8109_test.py:155: AssertionError
|