Skip to content

separated positional parameters functionality in tests #1109

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
325 changes: 325 additions & 0 deletions test/sql/other/aliases.slt
Original file line number Diff line number Diff line change
@@ -0,0 +1,325 @@
# Test basic column aliases
query TT
SELECT 'text' as alias, alias
----
text text

# Test multiple column aliases
query TTT
SELECT 'hello' AS greeting, 'world' AS target, greeting || ' ' || target AS message
----
hello world hello world

# Test numeric expression aliases
query III
SELECT 10 AS num1, 20 AS num2, num1 + num2 AS sum_result
----
10 20 30

# Test function aliases
query TI
SELECT 'hello world' AS text_val, LENGTH(text_val) AS text_length
----
hello world 11

# Test case-insensitive aliases
query TT
SELECT 'test' AS MyAlias, myalias AS lower_ref
----
test test

# Setup test tables for more complex alias scenarios
exclude-from-coverage
statement ok
CREATE OR REPLACE TABLE employees (
id INTEGER,
name VARCHAR,
department VARCHAR,
salary INTEGER
);

exclude-from-coverage
statement ok
INSERT INTO employees VALUES
(1, 'Alice', 'Engineering', 75000),
(2, 'Bob', 'Sales', 60000),
(3, 'Charlie', 'Engineering', 80000),
(4, 'Diana', 'Marketing', 65000);

exclude-from-coverage
statement ok
CREATE OR REPLACE TABLE departments (
dept_name VARCHAR,
budget INTEGER
);

exclude-from-coverage
statement ok
INSERT INTO departments VALUES
('Engineering', 500000),
('Sales', 300000),
('Marketing', 200000);

# Test table aliases
query TTI
SELECT e.name, e.department, e.salary
FROM employees AS e
WHERE e.salary > 65000
ORDER BY e.name
----
Alice Engineering 75000
Charlie Engineering 80000

# Test table aliases without AS keyword
query TT
SELECT emp.name, emp.department
FROM employees emp
WHERE emp.department = 'Sales'
----
Bob Sales

# Test join with table aliases
query TTII
SELECT e.name AS employee_name, e.department AS dept, e.salary AS emp_salary, d.budget AS dept_budget
FROM employees e
JOIN departments d ON e.department = d.dept_name
WHERE e.salary > 70000
ORDER BY e.name
----
Alice Engineering 75000 500000
Charlie Engineering 80000 500000

# Test aliases in ORDER BY clause
query TI
SELECT name AS employee_name, salary AS emp_salary
FROM employees
ORDER BY emp_salary DESC, employee_name
----
Charlie 80000
Alice 75000
Diana 65000
Bob 60000

# Test aliases in GROUP BY clause
query TI
SELECT department AS dept, COUNT(*) AS employee_count
FROM employees
GROUP BY dept
ORDER BY dept
----
Engineering 2
Marketing 1
Sales 1

# Test aliases in HAVING clause
query TI
SELECT department AS dept, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept
HAVING avg_salary > 65000
ORDER BY dept
----
Engineering 77500.000000

# Test subquery aliases
query TI
SELECT sub.dept_name, sub.emp_count
FROM (
SELECT department AS dept_name, COUNT(*) AS emp_count
FROM employees
GROUP BY department
) AS sub
WHERE sub.emp_count > 1
----
Engineering 2

# Test derived table aliases with column aliases
query TI
SELECT dept_info.name AS department_name, dept_info.count AS total_employees
FROM (
SELECT department AS name, COUNT(*) AS count
FROM employees
GROUP BY department
) dept_info
ORDER BY dept_info.count DESC
----
Engineering 2
Sales 1
Marketing 1

# Test CTE aliases
query TI
WITH dept_stats AS (
SELECT department AS dept_name, COUNT(*) AS emp_count, AVG(salary) AS avg_sal
FROM employees
GROUP BY department
)
SELECT dept_stats.dept_name, dept_stats.emp_count
FROM dept_stats
WHERE dept_stats.avg_sal > 70000
----
Engineering 2

# Test multiple CTEs with aliases
query TTI
WITH
high_earners AS (
SELECT name AS emp_name, department AS dept, salary AS sal
FROM employees
WHERE salary > 70000
),
dept_budgets AS (
SELECT dept_name AS department, budget AS total_budget
FROM departments
)
SELECT he.emp_name, he.dept, db.total_budget
FROM high_earners he
JOIN dept_budgets db ON he.dept = db.department
ORDER BY he.emp_name
----
Alice Engineering 500000
Charlie Engineering 500000

# Test complex expression aliases
query TTII
SELECT
name AS emp_name,
UPPER(department) AS dept_upper,
salary * 12 AS annual_salary,
CASE
WHEN salary > 70000 THEN salary * 0.1
ELSE salary * 0.05
END AS bonus
FROM employees
WHERE annual_salary > 700000
ORDER BY emp_name
----
Alice ENGINEERING 900000 7500.00
Bob SALES 720000 3000.00
Charlie ENGINEERING 960000 8000.00
Diana MARKETING 780000 3250.00

# Test nested subquery with aliases
query TI
SELECT outer_query.dept, outer_query.max_sal
FROM (
SELECT
inner_query.department AS dept,
MAX(inner_query.salary) AS max_sal
FROM (
SELECT name, department, salary
FROM employees
WHERE salary > 60000
) AS inner_query
GROUP BY inner_query.department
) AS outer_query
ORDER BY outer_query.max_sal DESC
----
Engineering 80000
Marketing 65000

# Test aliases with window functions
query TII
SELECT
name AS emp_name,
salary AS current_salary,
ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees
ORDER BY dept_rank, current_salary DESC
----
Charlie 80000 1
Diana 65000 1
Bob 60000 1
Alice 75000 2

# Test aliases with UNION
query T
SELECT name AS person FROM employees WHERE department = 'Engineering'
UNION
SELECT 'Manager' AS person
ORDER BY person
----
Alice
Charlie
Manager

# Test table alias with qualified column references
query TT
SELECT e.name AS employee, d.dept_name AS department
FROM employees e, departments d
WHERE e.department = d.dept_name AND e.salary > 70000
ORDER BY e.name
----
Alice Engineering
Charlie Engineering

# Test alias scoping - alias visible in WHERE clause of same level
query TT
SELECT name AS emp_name, salary
FROM employees
WHERE emp_name = 'Alice'
----
Alice 75000

# Test valid alias usage in subquery WHERE clause
query TI
SELECT emp_name, sal
FROM (
SELECT name AS emp_name, salary AS sal
FROM employees
WHERE salary > 65000
) sub
WHERE emp_name LIKE 'A%'
----
Alice 75000

# Test aliases with special characters (quoted identifiers)
query TT
SELECT name AS "Employee Name", department AS "Dept-Code"
FROM employees
WHERE salary = 75000
----
Alice Engineering

# Test self-join with table aliases
query TTI
SELECT e1.name AS emp1, e2.name AS emp2, e1.salary AS salary_diff
FROM employees e1
JOIN employees e2 ON e1.department = e2.department AND e1.id < e2.id
WHERE e1.department = 'Engineering'
----
Alice Charlie 75000

# Test alias reuse in different contexts
query TT
SELECT
(SELECT name FROM employees WHERE id = 1) AS result,
(SELECT department FROM employees WHERE id = 1) AS result
----
Alice Engineering

# Test aggregate function aliases
query TII
SELECT
department AS dept,
COUNT(*) AS headcount,
SUM(salary) AS total_payroll
FROM employees
GROUP BY dept
HAVING headcount > 1
----
Engineering 2 155000

# Test EXISTS with aliases
query T
SELECT e.name
FROM employees e
WHERE EXISTS (
SELECT 1
FROM departments d
WHERE d.dept_name = e.department AND d.budget > 400000
)
ORDER BY e.name
----
Alice
Charlie
Loading