File: test_table_metadata_rendering.py

package info (click to toggle)
duckdb 1.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 299,196 kB
  • sloc: cpp: 865,414; ansic: 57,292; python: 18,871; sql: 12,663; lisp: 11,751; yacc: 7,412; lex: 1,682; sh: 747; makefile: 558
file content (124 lines) | stat: -rw-r--r-- 5,728 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# fmt: off

import pytest
import subprocess
import sys
from typing import List
from conftest import ShellTest
import os
from pathlib import Path


def test_many_tables(shell):
    test = (
        ShellTest(shell)
        .statement('''
CREATE TABLE customer(c_custkey BIGINT NOT NULL, c_name VARCHAR NOT NULL, c_address VARCHAR NOT NULL, c_nationkey INTEGER NOT NULL, c_phone VARCHAR NOT NULL, c_acctbal DECIMAL(15,2) NOT NULL, c_mktsegment VARCHAR NOT NULL, c_comment VARCHAR NOT NULL);
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);
CREATE TABLE nation(n_nationkey INTEGER NOT NULL, n_name VARCHAR NOT NULL, n_regionkey INTEGER NOT NULL, n_comment VARCHAR NOT NULL);
CREATE TABLE orders(o_orderkey BIGINT NOT NULL, o_custkey BIGINT NOT NULL, o_orderstatus VARCHAR NOT NULL, o_totalprice DECIMAL(15,2) NOT NULL, o_orderdate DATE NOT NULL, o_orderpriority VARCHAR NOT NULL, o_clerk VARCHAR NOT NULL, o_shippriority INTEGER NOT NULL, o_comment VARCHAR NOT NULL);
CREATE TABLE part(p_partkey BIGINT NOT NULL, p_name VARCHAR NOT NULL, p_mfgr VARCHAR NOT NULL, p_brand VARCHAR NOT NULL, p_type VARCHAR NOT NULL, p_size INTEGER NOT NULL, p_container VARCHAR NOT NULL, p_retailprice DECIMAL(15,2) NOT NULL, p_comment VARCHAR NOT NULL);
CREATE TABLE partsupp(ps_partkey BIGINT NOT NULL, ps_suppkey BIGINT NOT NULL, ps_availqty BIGINT NOT NULL, ps_supplycost DECIMAL(15,2) NOT NULL, ps_comment VARCHAR NOT NULL);
CREATE TABLE region(r_regionkey INTEGER NOT NULL, r_name VARCHAR NOT NULL, r_comment VARCHAR NOT NULL);
CREATE TABLE supplier(s_suppkey BIGINT NOT NULL, s_name VARCHAR NOT NULL, s_address VARCHAR NOT NULL, s_nationkey INTEGER NOT NULL, s_phone VARCHAR NOT NULL, s_acctbal DECIMAL(15,2) NOT NULL, s_comment VARCHAR NOT NULL);''')
        .statement('.tables')
        .statement('describe lineitem')
        .statement('show tables')
    )

    result = test.run()
    result.check_stdout("decimal")
    result.check_stdout("not null")

def test_long_table_name(shell):
    test = (
        ShellTest(shell)
        .statement(".maxwidth 80")
        .statement(f'create table "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"(i int);')
        .statement('.tables')
    )

    result = test.run()
    result.check_stdout("…")

def test_long_column_name(shell):
    test = (
        ShellTest(shell)
        .statement(".maxwidth 80")
        .statement(f'describe select 42 as "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";')
    )

    result = test.run()
    result.check_stdout("…")

def test_long_type_name(shell):
    test = (
        ShellTest(shell)
        .statement(".maxwidth 80")
        .statement('describe select {"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz": 42} as a;')
    )

    result = test.run()
    result.check_stdout("…")

def test_long_type_and_column_name(shell):
    test = (
        ShellTest(shell)
        .statement(".maxwidth 80")
        .statement('describe select {"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz": 42} as "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";')
    )

    result = test.run()
    result.check_stdout("…")

def test_table_rendering_db(shell):
    test = (
        ShellTest(shell)
        .statement('create schema s1')
        .statement("attach ':memory:' as mydb")
        .statement('create schema mydb.s2')
        .statement('create table s1.my_tbl(i integer)')
        .statement('create table mydb.s2.other_tbl(i integer)')
        .statement('.tables')
    )

    result = test.run()
    result.check_stdout("s1")
    result.check_stdout("mydb")
    result.check_stdout("s2")
    result.check_stdout("other_tbl")

def test_search_path_influences_table_name(shell):
    test = (
        ShellTest(shell)
        .statement("attach ':memory:' as mydb")
        .statement('create schema mydb.s2')
        .statement('create table mydb.s2.other_tbl(i integer)')
        .statement('use mydb.s2')
        .statement('.tables')
    )

    result = test.run()
    result.check_not_exist("mydb.s2")


def test_qualified_show_tables(shell):
    test = (
        ShellTest(shell)
        .statement("create table t1 as from range(10)")
        .statement('show tables from memory.main')
    )

    result = test.run()
    result.check_stdout("t1")

def test_tables_rendering_large_database(shell):
    test = (
        ShellTest(shell)
        .statement("attach ':memory:' as thisisanenormousdatabasenamethatmightoverflowthetablerenderingmechanism;")
        .statement("create table thisisanenormousdatabasenamethatmightoverflowthetablerenderingmechanism.tbl(i int);")
        .statement('.tables')
    )

    result = test.run()
    result.check_stdout("thisisanenormousdatabasenamethatmightoverflowthetablerenderingmechanism")