from metadata import (
MetaData,
alias,
name_join,
fk_join,
join,
keyword,
schema,
table,
view,
function,
column,
wildcard_expansion,
get_result,
result_set,
qual,
no_qual,
parametrize,
)
from prompt_toolkit.completion import Completion
from utils import completions_to_set
metadata = {
"tables": {
"users": ["id", "parentid", "email", "first_name", "last_name"],
"Users": ["userid", "username"],
"orders": ["id", "ordered_date", "status", "email"],
"select": ["id", "insert", "ABC"],
},
"views": {"user_emails": ["id", "email"], "functions": ["function"]},
"functions": [
["custom_fun", [], [], [], "", False, False, False, False],
["_custom_fun", [], [], [], "", False, False, False, False],
["custom_func1", [], [], [], "", False, False, False, False],
["custom_func2", [], [], [], "", False, False, False, False],
[
"set_returning_func",
["x", "y"],
["integer", "integer"],
["b", "b"],
"",
False,
False,
True,
False,
],
],
"datatypes": ["custom_type1", "custom_type2"],
"foreignkeys": [
("public", "users", "id", "public", "users", "parentid"),
("public", "users", "id", "public", "Users", "userid"),
],
}
metadata = dict((k, {"public": v}) for k, v in metadata.items())
testdata = MetaData(metadata)
cased_users_col_names = ["ID", "PARENTID", "Email", "First_Name", "last_name"]
cased_users2_col_names = ["UserID", "UserName"]
cased_func_names = [
"Custom_Fun",
"_custom_fun",
"Custom_Func1",
"custom_func2",
"set_returning_func",
]
cased_tbls = ["Users", "Orders"]
cased_views = ["User_Emails", "Functions"]
casing = (
["SELECT", "PUBLIC"]
+ cased_func_names
+ cased_tbls
+ cased_views
+ cased_users_col_names
+ cased_users2_col_names
)
# Lists for use in assertions
cased_funcs = [
function(f)
for f in ("Custom_Fun()", "_custom_fun()", "Custom_Func1()", "custom_func2()")
] + [function("set_returning_func(x := , y := )", display="set_returning_func(x, y)")]
cased_tbls = [table(t) for t in (cased_tbls + ['"Users"', '"select"'])]
cased_rels = [view(t) for t in cased_views] + cased_funcs + cased_tbls
cased_users_cols = [column(c) for c in cased_users_col_names]
aliased_rels = (
[table(t) for t in ("users u", '"Users" U', "orders o", '"select" s')]
+ [view("user_emails ue"), view("functions f")]
+ [
function(f)
for f in (
"_custom_fun() cf",
"custom_fun() cf",
"custom_func1() cf",
"custom_func2() cf",
)
]
+ [
function(
"set_returning_func(x := , y := ) srf",
display="set_returning_func(x, y) srf",
)
]
)
cased_aliased_rels = (
[table(t) for t in ("Users U", '"Users" U', "Orders O", '"select" s')]
+ [view("User_Emails UE"), view("Functions F")]
+ [
function(f)
for f in (
"_custom_fun() cf",
"Custom_Fun() CF",
"Custom_Func1() CF",
"custom_func2() cf",
)
]
+ [
function(
"set_returning_func(x := , y := ) srf",
display="set_returning_func(x, y) srf",
)
]
)
completers = testdata.get_completers(casing)
# Just to make sure that this doesn't crash
@parametrize("completer", completers())
def test_function_column_name(completer):
for l in range(
len("SELECT * FROM Functions WHERE function:"),
len("SELECT * FROM Functions WHERE function:text") + 1,
):
assert [] == get_result(