File: test_macro_overloads.test

package info (click to toggle)
duckdb 1.5.1-3
  • 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: 564
file content (97 lines) | stat: -rw-r--r-- 2,277 bytes parent folder | download | duplicates (4)
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
# name: test/sql/catalog/function/test_macro_overloads.test
# description: Test macro overloads
# group: [function]

statement ok
PRAGMA enable_verification

# simple overloaded macro
statement ok
CREATE MACRO multi_add
	() AS 0,
	(a) AS a,
	(a, b) AS a + b,
	(a, b, c) AS  a + b + c,
	(a, b, c, d) AS  a + b + c + d,
	(a, b, c, d, e) AS  a + b + c + d + e

query IIIIII
SELECT multi_add(),
       multi_add(42),
       multi_add(42, 1),
       multi_add(42, 1, 1),
       multi_add(42, 1, 1, 1),
       multi_add(42, 1, 1, 1, 1)
----
0	42	43	44	45	46

# overload not found
statement error
SELECT multi_add(1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
----
does not support the supplied arguments

# named parameters
statement ok
CREATE MACRO arithmetic
	(a, b, mult := 1) AS (a + b) * mult,
	(a, b, c, division := 1) AS  (a + b + c) / division

statement error
select arithmetic(100, 200, 300)
----
multiple overloads that match the supplied arguments

# disambiguate arithmetic(100, 200, 300) using c := 300
query IIII
SELECT arithmetic(42, 84), arithmetic(42, 84, mult := 10), arithmetic(100, 200, c := 300), arithmetic(100, 200, 300, division := 10)
----
126	1260	600	60

# table macro overloads
statement ok
CREATE MACRO generate_numbers
	(a, b) AS TABLE (SELECT * FROM range(a + b) t(i)),
	(a, b, c, mult := 1) AS TABLE (SELECT * FROM range((a + b + c) * mult) t(i))

query I
SELECT COUNT(*) FROM generate_numbers(20, 10);
----
30

query I
SELECT COUNT(*) FROM generate_numbers(1, 2, 2, mult := 5);
----
25


# view overloads in duckdb_functions
query II
SELECT function_name, parameters FROM duckdb_functions() WHERE function_name IN ('arithmetic', 'multi_add', 'generate_numbers') ORDER BY function_name, len(parameters)
----
arithmetic	[a, b, mult]
arithmetic	[a, b, c, division]
generate_numbers	[a, b]
generate_numbers	[a, b, c, mult]
multi_add	[]
multi_add	[a]
multi_add	[a, b]
multi_add	[a, b, c]
multi_add	[a, b, c, d]
multi_add	[a, b, c, d, e]

# ambiguity conflict between macros
statement error
CREATE MACRO ambiguous_macro
	(a) AS a,
	(a) AS a + 1
----
Ambiguity in macro overloads

# error in macro overload definition
statement error
CREATE MACRO error_in_definition
	(a) AS a,
	(a, b) AS a + y
----
Referenced column "y" was not found because the FROM clause is missing