should be it
This commit is contained in:
95
external/duckdb/tools/shell/tests/test_errors.py
vendored
Normal file
95
external/duckdb/tools/shell/tests/test_errors.py
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
# fmt: off
|
||||
|
||||
import pytest
|
||||
import subprocess
|
||||
import sys
|
||||
from typing import List
|
||||
from conftest import ShellTest
|
||||
import os
|
||||
|
||||
lineitem_ddl = 'CREATE TABLE lineitem(l_orderkey BIGINT NOT NULL, l_partkey BIGINT NOT NULL, l_suppkey BIGINT NOT NULL, l_linenumber BIGINT NOT NULL, l_quantity DECIMAL(15,2) NOT NULL, l_extendedprice DECIMAL(15,2) NOT NULL, l_discount DECIMAL(15,2) NOT NULL, l_tax DECIMAL(15,2) NOT NULL, l_returnflag VARCHAR NOT NULL, l_linestatus VARCHAR NOT NULL, l_shipdate DATE NOT NULL, l_commitdate DATE NOT NULL, l_receiptdate DATE NOT NULL, l_shipinstruct VARCHAR NOT NULL, l_shipmode VARCHAR NOT NULL, l_comment VARCHAR NOT NULL);'
|
||||
|
||||
@pytest.mark.skipif(os.name == 'nt', reason="Windows highlighting does not use shell escapes")
|
||||
def test_incorrect_column(shell):
|
||||
test = (
|
||||
ShellTest(shell)
|
||||
.statement(".highlight_errors on")
|
||||
.statement(lineitem_ddl)
|
||||
.statement('select * from lineitem where l_extendedpric=5;')
|
||||
)
|
||||
result = test.run()
|
||||
result.check_stderr('"\x1b[33ml_extendedprice')
|
||||
result.check_stderr('"\x1b[33ml_extendedpric\x1b[0m')
|
||||
|
||||
@pytest.mark.skipif(os.name == 'nt', reason="Windows highlighting does not use shell escapes")
|
||||
def test_missing_table(shell):
|
||||
test = (
|
||||
ShellTest(shell)
|
||||
.statement(".highlight_errors on")
|
||||
.statement(lineitem_ddl)
|
||||
.statement('select * from lineite where l_extendedprice=5;')
|
||||
)
|
||||
result = test.run()
|
||||
result.check_stderr('"\x1b[33mlineitem\x1b[0m')
|
||||
|
||||
@pytest.mark.skipif(os.name == 'nt', reason="Windows highlighting does not use shell escapes")
|
||||
def test_long_error(shell):
|
||||
test = (
|
||||
ShellTest(shell)
|
||||
.statement(".highlight_errors on")
|
||||
.statement(lineitem_ddl)
|
||||
.statement('''SELECT
|
||||
l_returnflag,
|
||||
l_linestatus,
|
||||
sum(l_quantity) AS sum_qty,
|
||||
sum(l_extendedprice) AS sum_base_price,
|
||||
sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price,
|
||||
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,
|
||||
avg(l_quantity) AS avg_qty,
|
||||
avg(l_extendedprice) AS avg_price,
|
||||
avg(l_discount) AS avg_disc,
|
||||
count(*) AS count_order
|
||||
FROM
|
||||
lineitem
|
||||
WHERE
|
||||
l_shipdate <= CAST('1998-09-02' AS date) + timestamp '2020-01-01'
|
||||
GROUP BY
|
||||
l_returnflag,
|
||||
l_linestatus
|
||||
ORDER BY
|
||||
l_returnflag,
|
||||
l_linestatus;''')
|
||||
)
|
||||
result = test.run()
|
||||
result.check_stderr('\x1b[33m+(DATE, TIMESTAMP)\x1b[0m')
|
||||
result.check_stderr('\x1b[32mCAST\x1b[0m')
|
||||
|
||||
@pytest.mark.skipif(os.name == 'nt', reason="Windows highlighting does not use shell escapes")
|
||||
def test_single_quotes_in_error(shell):
|
||||
test = (
|
||||
ShellTest(shell)
|
||||
.statement(".highlight_errors on")
|
||||
.statement("select \"I'm an error\"")
|
||||
)
|
||||
result = test.run()
|
||||
result.check_stderr('"\x1b[33mI\'m an error\x1b[0m')
|
||||
|
||||
@pytest.mark.skipif(os.name == 'nt', reason="Windows highlighting does not use shell escapes")
|
||||
def test_double_quotes_in_error(shell):
|
||||
test = (
|
||||
ShellTest(shell)
|
||||
.statement(".highlight_errors on")
|
||||
.statement("select error('''I\"m an error''')")
|
||||
)
|
||||
result = test.run()
|
||||
result.check_stderr('\x1b[33mI"m an error\x1b[0m')
|
||||
|
||||
@pytest.mark.skipif(os.name == 'nt', reason="Windows highlighting does not use shell escapes")
|
||||
def test_unterminated_quote(shell):
|
||||
test = (
|
||||
ShellTest(shell)
|
||||
.statement(".highlight_errors on")
|
||||
.statement("select error('I''m an error')")
|
||||
)
|
||||
result = test.run()
|
||||
result.check_stderr('I\'m an error')
|
||||
Reference in New Issue
Block a user