databend
databend copied to clipboard
bug: fatal runtime error: stack overflow
Summary
Version
https://github.com/datafuselabs/databend/releases/tag/v1.2.531-nightly
How to produce
create database selects;
use selects;
CREATE OR REPLACE TABLE customers (
customer_id INT UNSIGNED NOT NULL,
customer_name VARCHAR NOT NULL,
segment VARCHAR NOT NULL,
create_timestamp DATE NOT NULL,
active BOOLEAN NOT NULL
) row_per_block=51113;
CREATE OR REPLACE TABLE date_dim (
date_key DATE NOT NULL,
day_of_week TINYINT UNSIGNED NOT NULL,
month TINYINT UNSIGNED NOT NULL,
year SMALLINT UNSIGNED NOT NULL
) row_per_block=53;
CREATE OR REPLACE TABLE products
(
product_id INT UNSIGNED NOT NULL,
product_name VARCHAR NOT NULL,
price DECIMAL(10, 2) NOT NULL,
category VARCHAR NOT NULL
) row_per_block=5113;
CREATE OR REPLACE TABLE sales (
sale_id INT UNSIGNED NOT NULL,
product_id INT UNSIGNED NOT NULL,
customer_id INT UNSIGNED NOT NULL,
sale_date DATE NOT NULL,
quantity INT NOT NULL,
net_paid DECIMAL(10, 2) NOT NULL
) row_per_block=51113;
Query
WITH InitialSales AS (
SELECT
c.customer_id,
c.customer_name,
s.sale_date,
YEAR(s.sale_date) AS sale_year,
s.net_paid,
s.net_paid AS cumulative_sales,
s.net_paid AS yearly_sales,
s.sale_id,
1 AS level
FROM sales s
JOIN customers c ON s.customer_id = c.customer_id
WHERE s.sale_date = (SELECT MIN(sale_date) FROM sales WHERE customer_id = c.customer_id)
),
CustomerSales AS (
SELECT * FROM InitialSales
UNION ALL
SELECT
s.customer_id,
c.customer_name,
s.sale_date,
YEAR(s.sale_date) AS sale_year,
s.net_paid,
cs.cumulative_sales + s.net_paid AS cumulative_sales,
CASE
WHEN YEAR(s.sale_date) = cs.sale_year THEN cs.yearly_sales + s.net_paid
ELSE s.net_paid
END AS yearly_sales,
s.sale_id,
cs.level + 1
FROM sales s
JOIN customers c ON s.customer_id = c.customer_id
JOIN CustomerSales cs ON s.customer_id = cs.customer_id AND s.sale_date > cs.sale_date
WHERE cs.level < 100
)
SELECT
customer_id,
customer_name,
sale_year,
sale_date,
net_paid,
cumulative_sales,
yearly_sales
FROM CustomerSales
ORDER BY customer_id, sale_date, net_paid, cumulative_sales, sale_id
LIMIT 10;
Panic
databend-query panic stack:
Thread 37 "g-query-worker" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fff517ff640 (LWP 977341)]
0x000055555bfca1d5 in async_backtrace::frame::Frame::new () at /opt/rust/cargo/git/checkouts/async-backtrace-dc8b2c67d0719549-shallow/dea4553/backtrace/src/frame.rs:113
113 /opt/rust/cargo/git/checkouts/async-backtrace-dc8b2c67d0719549-shallow/dea4553/backtrace/src/frame.rs: No such file or directory.
(gdb) bt
#0 0x000055555bfca1d5 in async_backtrace::frame::Frame::new () at /opt/rust/cargo/git/checkouts/async-backtrace-dc8b2c67d0719549-shallow/dea4553/backtrace/src/frame.rs:113
#1 async_backtrace::framed::Framed::new<databend_common_sql::planner::binder::bind_table_reference::bind::{impl#0}::bind_table_reference::{async_block#0}::{async_block_env#0}> ()
at /opt/rust/cargo/git/checkouts/async-backtrace-dc8b2c67d0719549-shallow/dea4553/backtrace/src/framed.rs:32
#2 async_backtrace::location::Location::frame<databend_common_sql::planner::binder::bind_table_reference::bind::{impl#0}::bind_table_reference::{async_block#0}::{async_block_env#0}>
() at /opt/rust/cargo/git/checkouts/async-backtrace-dc8b2c67d0719549-shallow/dea4553/backtrace/src/location.rs:149
#3 databend_common_sql::planner::binder::bind_table_reference::bind::{impl#0}::bind_table_reference::{async_block#0} ()
at src/query/sql/src/planner/binder/bind_table_reference/bind.rs:25
#4 0x000055555bdc9eda in core::future::future::{impl#1}::poll<alloc::boxed::Box<(dyn core::future::future::Future<Output=core::result::Result<(databend_common_sql::planner::optimizer::s_expr::SExpr, databend_common_sql::planner::binder::bind_context::BindContext), databend_common_exception::exception::ErrorCode>> + core::marker::Send), alloc::alloc::Global>> ()
at /rustc/8ace7ea1f7cbba7b4f031e66c54ca237a0d65de6/library/core/src/future/future.rs:124
#5 databend_common_sql::planner::binder::bind_table_reference::bind_join::{impl#0}::bind_join::{async_block#0}::{async_block#0} ()
at src/query/sql/src/planner/binder/bind_table_reference/bind_join.rs:71
#6 async_backtrace::framed::{impl#2}::poll::{closure#0}<databend_common_sql::planner::binder::bind_table_reference::bind_join::{impl#0}::bind_join::{async_block#0}::{async_block_env#0}> () at /opt/rust/cargo/git/checkouts/async-backtrace-dc8b2c67d0719549-shallow/dea4553/backtrace/src/framed.rs:49
#7 async_backtrace::frame::{impl#1}::in_scope::{closure#0}<async_backtrace::framed::{impl#2}::poll::{closure_env#0}<databend_common_sql::planner::binder::bind_table_reference::bind_join::{impl#0}::bind_join::{async_block#0}::{async_block_env#0}>, core::task::poll::Poll<core::result::Result<(databend_common_sql::planner::optimizer::s_expr::SExpr, databend_common_sql::planner::binder::bind_context::BindContext), databend_common_exception::exception::ErrorCode>>> ()
at /opt/rust/cargo/git/checkouts/async-backtrace-dc8b2c67d0719549-shallow/dea4553/backtrace/src/frame.rs:184
#8 std::thread::local::LocalKey::try_with<core::cell::Cell<core::option::Option<core::ptr::non_null::NonNull<async_backtrace::frame::Frame>>>, async_backtrace::frame::{impl#1}::in_scope::{closure_env#0}<async_backtrace::framed::{impl#2}::poll::{closure_env#0}<databend_common_sql::planner::binder::bind_table_reference::bind_join::{impl#0}::bind_join::{async_block#0}::{async_block_env#0}>, core::task::poll::Poll<core::result::Result<(databend_common_sql::planner::optimizer::s_expr::SExpr, databend_common_sql::planner::binder::bind_context::BindContext), databend_common_exception::exception::ErrorCode>>>, core::task::poll::Poll<core::result::Result<(databend_common_sql::planner::optimizer::s_expr::SExpr, databend_common_sql::planner::binder::bind_context::BindContext), databend_common_exception::exception::ErrorCode>>> ()
at /rustc/8ace7ea1f7cbba7b4f031e66c54ca237a0d65de6/library/std/src/thread/local.rs:286
#9 std::thread::local::LocalKey::with<core::cell::Cell<core::option::Option<core::ptr::non_null::NonNull<async_backtrace::frame::Frame>>>, async_backtrace::frame::{impl#1}::in_scope::{closure_env#0}<async_backtrace::framed::{impl#2}::poll::{closure_env#0}<databend_common_sql::planner::binder::bind_table_reference::bind_join::{impl#0}::bind_join::{async_block#0}::{async_block_env#0}>, core::task::poll::Poll<core::result::Result<(databend_common_sql::planner::optimizer::s_expr::SExpr, databend_common_sql::planner::binder::bind_context::BindContext), databend_common_exception::exception::ErrorCode>>>, core::task::poll::Poll<core::result::Result<(databend_common_sql::planner::optimizer::s_expr::SExpr, databend_common_sql::planner::binder::bind_context::BindContext), databend_common_exception::exception::ErrorCode>>> () at /rustc/8ace7ea1f7cbba7b4f031e66c54ca237a0d65de6/library/std/src/thread/local.rs:262
#10 0x000055555bfca47f in async_backtrace::frame::active_frame::with<async_backtrace::frame::{impl#1}::in_scope::{closure_env#0}<async_backtrace::framed::{impl#2}::poll::{closure_env#0}<databend_common_sql::planner::binder::bind_table_reference::bind_join::{impl#0}::bind_join::{async_block#0}::{async_block_env#0}>, core::task::poll::Poll<core::result::Result<(databend_common_sql::planner::optimizer::s_expr::SExpr, databend_common_sql::planner::binder::bind_context::BindContext), databend_common_exception::exception::ErrorCode>>>, core::task::poll::Poll<core::result::Result<(databend_common_sql::planner::optimizer::s_expr::SExpr, databend_common_sql::planner::binder::bind_context::BindContext), databend_common_exception::exception::ErrorCode>>> () at /opt/rust/cargo/git/checkouts/async-backtrace-dc8b2c67d0719549-shallow/dea4553/backtrace/src/frame.rs:81
#11 async_backtrace::frame::Frame::in_scope<async_backtrace::framed::{impl#2}::poll::{closure_env#0}<databend_common_sql::planner::binder::bind_table_reference::bind_join::{impl#0}::bind_join::{async_block#0}::{async_block_env#0}>, core::task::poll::Poll<core::result::Result<(databend_common_sql::planner::optimizer::s_expr::SExpr, databend_common_sql::planner::binder::bind_context::BindContext), databend_common_exception::exception::ErrorCode>>> ()
at /opt/rust/cargo/git/checkouts/async-backtrace-dc8b2c67d0719549-shallow/dea4553/backtrace/src/frame.rs:180
#12 async_backtrace::framed::{impl#2}::poll<databend_common_sql::planner::binder::bind_table_reference::bind_join::{impl#0}::bind_join::{async_block#0}::{async_block_env#0}> ()
at /opt/rust/cargo/git/checkouts/async-backtrace-dc8b2c67d0719549-shallow/dea4553/backtrace/src/framed.rs:49
#13 databend_common_sql::planner::binder::bind_table_reference::bind_join::{impl#0}::bind_join::{async_block#0} ()
at src/query/sql/src/planner/binder/bind_table_reference/bind_join.rs:64
#14 0x000055555bde8909 in core::future::future::{impl#1}::poll<alloc::boxed::Box<(dyn core::future::future::Future<Output=core::result::Result<(databend_common_sql::planner::optimizer::s_expr::SExpr, databend_common_sql::planner::binder::bind_context::BindContext), databend_common_exception::exception::ErrorCode>> + core::marker::Send), alloc::alloc::Global>> ()
at /rustc/8ace7ea1f7cbba7b4f031e66c54ca237a0d65de6/library/core/src/future/future.rs:124
#15 databend_common_sql::planner::binder::bind_table_reference::bind::{impl#0}::bind_table_reference::{async_block#0}::{async_block#0} ()
at src/query/sql/src/planner/binder/bind_table_reference/bind.rs:84
#16 async_backtrace::framed::{impl#2}::poll::{closure#0}<databend_common_sql::planner::binder::bind_table_reference::bind::{impl#0}::bind_table_reference::{async_block#0}::{async_block_env#0}> () at /opt/rust/cargo/git/checkouts/async-backtrace-dc8b2c67d0719549-shallow/dea4553/backtrace/src/framed.rs:49
#17 async_backtrace::frame::{impl#1}::in_scope::{closure#0}<async_backtrace::framed::{impl#2}::poll::{closure_env#0}<databend_common_sql::planner::binder::bind_table_reference::bind::{impl#0}::bind_table_reference::{async_block#0}::{async_block_env#0}>, core::task::poll::Poll<core::result::Result<(databend_common_sql::planner::optimizer::s_expr::SExpr, databend_common_sql::planner::binder::bind_context::BindContext), databend_common_exception::exception::ErrorCode>>> ()
at /opt/rust/cargo/git/checkouts/async-backtrace-dc8b2c67d0719549-shallow/dea4553/backtrace/src/frame.rs:184
#18 std::thread::local::LocalKey::try_with<core::cell::Cell<core::option::Option<core::ptr::non_null::NonNull<async_backtrace::frame::Frame>>>, async_backtrace::frame::{impl#1}::in_scope::{closure_env#0}<async_backtrace::framed::{impl#2}::poll::{closure_env#0}<databend_common_sql::planner::binder::bind_table_reference::bind::{impl#0}::bind_table_reference::{async_--Type <RET> for more, q to quit, c to continue without paging--
FYI @zhang2014
unstop recursion in binder with recursive cte. cc: @xudong963
The query is wrong. The second cte is recursive. I'll give an error info not stack overflow.