diff --git a/src/from_substrait.cpp b/src/from_substrait.cpp index c58ae9f..750e741 100644 --- a/src/from_substrait.cpp +++ b/src/from_substrait.cpp @@ -542,6 +542,7 @@ unique_ptr TableInfo(ClientContext &context, const string &sch shared_ptr SubstraitToDuckDB::TransformReadOp(const substrait::Rel &sop) { auto &sget = sop.read(); shared_ptr scan; + auto context_wrapper = make_shared_ptr(context); if (sget.has_named_table()) { auto table_name = sget.named_table().names(0); // If we can't find a table with that name, let's try a view. @@ -550,9 +551,19 @@ shared_ptr SubstraitToDuckDB::TransformReadOp(const substrait::Rel &so if (!table_info) { throw CatalogException("Table '%s' does not exist!", table_name); } - scan = make_shared_ptr(context, std::move(table_info), acquire_lock); + if (acquire_lock) { + scan = make_shared_ptr(context, std::move(table_info)); + + } else { + scan = make_shared_ptr(context_wrapper, std::move(table_info)); + } } catch (...) { - scan = make_shared_ptr(context, DEFAULT_SCHEMA, table_name, acquire_lock); + if (acquire_lock) { + scan = make_shared_ptr(context, DEFAULT_SCHEMA, table_name); + + } else { + scan = make_shared_ptr(context_wrapper, DEFAULT_SCHEMA, table_name); + } } } else if (sget.has_local_files()) { vector parquet_files; @@ -574,8 +585,15 @@ shared_ptr SubstraitToDuckDB::TransformReadOp(const substrait::Rel &so string name = "parquet_" + StringUtil::GenerateRandomName(); named_parameter_map_t named_parameters({{"binary_as_string", Value::BOOLEAN(false)}}); vector parameters {Value::LIST(parquet_files)}; - auto scan_rel = make_shared_ptr( - context, "parquet_scan", parameters, std::move(named_parameters), nullptr, true, acquire_lock); + shared_ptr scan_rel; + if (acquire_lock) { + scan_rel = make_shared_ptr(context, "parquet_scan", parameters, + std::move(named_parameters)); + } else { + scan_rel = make_shared_ptr(context_wrapper, "parquet_scan", parameters, + std::move(named_parameters)); + } + auto rel = static_cast(scan_rel.get()); scan = rel->Alias(name); } else if (sget.has_virtual_table()) { @@ -591,7 +609,12 @@ shared_ptr SubstraitToDuckDB::TransformReadOp(const substrait::Rel &so expression_rows.emplace_back(expression_row); } vector column_names; - scan = make_shared_ptr(context, expression_rows, column_names, "values", acquire_lock); + if (acquire_lock) { + scan = make_shared_ptr(context, expression_rows, column_names); + + } else { + scan = make_shared_ptr(context_wrapper, expression_rows, column_names); + } } else { throw NotImplementedException("Unsupported type of read operator for substrait"); }