Skip to content

Commit e430e4c

Browse files
authored
Merge pull request #287 from Dtenwolde/v1.4-rework-cte
v1.4.3 and CTEs seem to be fixed
2 parents a12ae70 + d5e54a6 commit e430e4c

File tree

12 files changed

+95
-93
lines changed

12 files changed

+95
-93
lines changed

.github/workflows/ExtensionTemplate.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
strategy:
1717
matrix:
1818
# Add commits/tags to build against other DuckDB versions
19-
duckdb_version: [ 'v1.4.1' ]
19+
duckdb_version: [ 'v1.4.3' ]
2020
env:
2121
VCPKG_TOOLCHAIN_PATH: ${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake
2222
VCPKG_TARGET_TRIPLET: 'x64-linux'
@@ -66,7 +66,7 @@ jobs:
6666
strategy:
6767
matrix:
6868
# Add commits/tags to build against other DuckDB versions
69-
duckdb_version: [ 'v1.4.1']
69+
duckdb_version: [ 'v1.4.3']
7070
env:
7171
VCPKG_TOOLCHAIN_PATH: ${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake
7272
VCPKG_TARGET_TRIPLET: 'x64-osx'
@@ -119,7 +119,7 @@ jobs:
119119
strategy:
120120
matrix:
121121
# Add commits/tags to build against other DuckDB versions
122-
duckdb_version: [ 'v1.4.1' ]
122+
duckdb_version: [ 'v1.4.3' ]
123123
env:
124124
VCPKG_TOOLCHAIN_PATH: ${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake
125125
VCPKG_TARGET_TRIPLET: 'x64-windows-static-md'

.github/workflows/MainDistributionPipeline.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,18 @@ concurrency:
1414
jobs:
1515
duckdb-stable-build:
1616
name: Build extension binaries
17-
uses: duckdb/extension-ci-tools/.github/workflows/_extension_distribution.yml@v1.4.1
17+
uses: duckdb/extension-ci-tools/.github/workflows/_extension_distribution.yml@v1.4.3
1818
with:
19-
duckdb_version: v1.4.1
20-
ci_tools_version: v1.4.1
19+
duckdb_version: v1.4.3
20+
ci_tools_version: v1.4.3
2121
extension_name: duckpgq
2222

2323

2424
code-quality-check:
2525
name: Code Quality Check
26-
uses: duckdb/extension-ci-tools/.github/workflows/_extension_code_quality.yml@v1.4.1
26+
uses: duckdb/extension-ci-tools/.github/workflows/_extension_code_quality.yml@v1.4.3
2727
with:
28-
duckdb_version: v1.4.1
28+
duckdb_version: v1.4.3
2929
ci_tools_version: main
3030
extension_name: duckpgq
3131
format_checks: 'format;tidy'

duckdb

Submodule duckdb updated 753 files

src/core/functions/table/create_property_graph.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
#include "duckdb/parser/constraints/foreign_key_constraint.hpp"
55
#include "duckdb/parser/statement/create_statement.hpp"
66
#include "duckpgq/common.hpp"
7-
#include <duckpgq/core/functions/table.hpp>
8-
#include <duckpgq/core/utils/duckpgq_utils.hpp>
7+
#include "duckpgq/core/functions/table.hpp"
8+
#include "duckpgq/core/utils/duckpgq_utils.hpp"
99
#include "duckdb/main/connection_manager.hpp"
10-
#include <duckpgq/core/parser/duckpgq_parser.hpp>
10+
#include "duckpgq/core/parser/duckpgq_parser.hpp"
1111
#include "duckdb/catalog/catalog.hpp"
1212

1313
namespace duckdb {
@@ -187,10 +187,11 @@ unique_ptr<FunctionData> CreatePropertyGraphFunction::CreatePropertyGraphBind(Cl
187187
CheckPropertyGraphTableColumns(vertex_table, table);
188188
CheckPropertyGraphTableLabels(vertex_table, table);
189189
} catch (CatalogException &e) {
190-
auto table =
191-
Catalog::GetEntry<ViewCatalogEntry>(context, vertex_table->catalog_name, vertex_table->schema_name,
192-
vertex_table->table_name, OnEntryNotFound::RETURN_NULL);
193-
if (table) {
190+
EntryLookupInfo view_info(CatalogType::VIEW_ENTRY, vertex_table->table_name, QueryErrorContext());
191+
192+
auto entry = Catalog::GetEntry(context, vertex_table->catalog_name, vertex_table->schema_name, view_info,
193+
OnEntryNotFound::RETURN_NULL);
194+
if (entry) {
194195
throw Exception(ExceptionType::INVALID, "Found a view with name " + vertex_table->table_name +
195196
". Creating property graph tables over views is "
196197
"currently not supported.");
@@ -247,13 +248,16 @@ unique_ptr<FunctionData> CreatePropertyGraphFunction::CreatePropertyGraphBind(Cl
247248
// Validate primary keys in the destination table
248249
ValidatePrimaryKeyInTable(context, edge_table->destination_pg_table, edge_table->destination_pk);
249250
} catch (CatalogException &e) {
250-
auto table = Catalog::GetEntry<ViewCatalogEntry>(context, edge_table->catalog_name, edge_table->schema_name,
251-
edge_table->table_name, OnEntryNotFound::RETURN_NULL);
252-
if (table) {
251+
EntryLookupInfo view_info(CatalogType::VIEW_ENTRY, edge_table->table_name, QueryErrorContext());
252+
253+
auto entry = Catalog::GetEntry(context, edge_table->catalog_name, edge_table->schema_name, view_info,
254+
OnEntryNotFound::RETURN_NULL);
255+
if (entry) {
253256
throw Exception(ExceptionType::INVALID, "Found a view with name " + edge_table->table_name +
254257
". Creating property graph tables over views is "
255258
"currently not supported.");
256259
}
260+
257261
throw Exception(ExceptionType::INVALID, e.what());
258262
} catch (BinderException &e) {
259263
throw Exception(ExceptionType::INVALID, "Catalog '" + edge_table->catalog_name + "' does not exist!");

src/core/functions/table/local_clustering_coefficient.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "duckpgq_extension.hpp"
44
#include "duckpgq/core/utils/duckpgq_utils.hpp"
55

6+
#include "duckdb/parser/query_node/cte_node.hpp"
67
#include "duckdb/parser/expression/constant_expression.hpp"
78
#include "duckdb/parser/expression/function_expression.hpp"
89
#include "duckpgq/core/utils/compressed_sparse_row.hpp"
@@ -26,15 +27,13 @@ LocalClusteringCoefficientFunction::LocalClusteringCoefficientBindReplace(Client
2627
auto edge_pg_entry = ValidateSourceNodeAndEdgeTable(pg_info, node_label, edge_label);
2728

2829
auto select_node = CreateSelectNode(edge_pg_entry, "local_clustering_coefficient", "local_clustering_coefficient");
29-
30-
select_node->cte_map.map["csr_cte"] = CreateUndirectedCSRCTE(edge_pg_entry, select_node);
31-
30+
select_node->cte_map.map["edges_cte"] = MakeEdgesCTE(edge_pg_entry);
31+
select_node->cte_map.map["csr_cte"] = CreateUndirectedCSRCTE(edge_pg_entry);
3232
auto subquery = make_uniq<SelectStatement>();
3333
subquery->node = std::move(select_node);
3434

3535
auto result = make_uniq<SubqueryRef>(std::move(subquery));
3636
result->alias = "lcc";
37-
// input.ref.alias = "lcc";
3837
return std::move(result);
3938
}
4039
//------------------------------------------------------------------------------

src/core/functions/table/match.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -497,12 +497,15 @@ unique_ptr<ParsedExpression> PGQMatchFunction::CreatePathFindingFunction(
497497
if (final_select_node->cte_map.map.find("cte1") == final_select_node->cte_map.map.end()) {
498498
edge_element = reinterpret_cast<PathElement *>(edge_subpath->path_list[0].get());
499499
if (edge_element->match_type == PGQMatchType::MATCH_EDGE_RIGHT) {
500+
500501
final_select_node->cte_map.map["cte1"] = CreateDirectedCSRCTE(
501502
FindGraphTable(edge_element->label, pg_table), previous_vertex_element->variable_binding,
502503
edge_element->variable_binding, next_vertex_element->variable_binding);
503504
} else if (edge_element->match_type == PGQMatchType::MATCH_EDGE_ANY) {
505+
final_select_node->cte_map.map["edges_cte"] =
506+
MakeEdgesCTE(FindGraphTable(edge_element->label, pg_table));
504507
final_select_node->cte_map.map["cte1"] =
505-
CreateUndirectedCSRCTE(FindGraphTable(edge_element->label, pg_table), final_select_node);
508+
CreateUndirectedCSRCTE(FindGraphTable(edge_element->label, pg_table));
506509
} else {
507510
throw NotImplementedException("Cannot do shortest path for edge type %s",
508511
edge_element->match_type == PGQMatchType::MATCH_EDGE_LEFT
@@ -663,7 +666,8 @@ void PGQMatchFunction::AddPathFinding(unique_ptr<SelectNode> &select_node,
663666
select_node->cte_map.map["cte1"] =
664667
CreateDirectedCSRCTE(edge_table, prev_binding, edge_binding, next_binding);
665668
} else if (edge_type == PGQMatchType::MATCH_EDGE_ANY) {
666-
select_node->cte_map.map["cte1"] = CreateUndirectedCSRCTE(edge_table, select_node);
669+
select_node->cte_map.map["edges_cte"] = MakeEdgesCTE(edge_table);
670+
select_node->cte_map.map["cte1"] = CreateUndirectedCSRCTE(edge_table);
667671
} else {
668672
throw NotImplementedException("Cannot do shortest path for edge type %s",
669673
edge_type == PGQMatchType::MATCH_EDGE_LEFT ? "MATCH_EDGE_LEFT"

src/core/functions/table/weakly_connected_component.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ WeaklyConnectedComponentFunction::WeaklyConnectedComponentBindReplace(ClientCont
2222

2323
auto select_node = CreateSelectNode(edge_pg_entry, "weakly_connected_component", "componentId");
2424

25-
select_node->cte_map.map["csr_cte"] = CreateUndirectedCSRCTE(edge_pg_entry, select_node);
25+
select_node->cte_map.map["edges_cte"] = MakeEdgesCTE(edge_pg_entry);
26+
select_node->cte_map.map["csr_cte"] = CreateUndirectedCSRCTE(edge_pg_entry);
2627

2728
auto subquery = make_uniq<SelectStatement>();
2829
subquery->node = std::move(select_node);

src/core/parser/duckpgq_parser.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ void duckpgq_find_match_function(unique_ptr<TableRef> &table_ref, DuckPGQState &
6464
break;
6565
}
6666
case TableReferenceType::BASE_TABLE:
67-
// A base table will never contain a duckpgq_match table function
67+
case TableReferenceType::EMPTY_FROM:
68+
// these will never contain a duckpgq_match table function
6869
break;
6970
case TableReferenceType::EXPRESSION_LIST:
7071
case TableReferenceType::CTE:
71-
case TableReferenceType::EMPTY_FROM:
7272
case TableReferenceType::PIVOT:
7373
case TableReferenceType::SHOW_REF:
7474
case TableReferenceType::COLUMN_DATA:

src/core/utils/compressed_sparse_row.cpp

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
#include "duckdb/parser/expression/star_expression.hpp"
77
#include "duckdb/parser/tableref/basetableref.hpp"
88
#include "duckdb/parser/tableref/subqueryref.hpp"
9+
#include "duckdb/parser/query_node/cte_node.hpp"
10+
#include "duckdb/parser/query_node/select_node.hpp"
911

1012
#include <duckpgq/core/utils/duckpgq_utils.hpp>
1113

@@ -393,7 +395,6 @@ unique_ptr<CommonTableExpressionInfo> MakeEdgesCTE(const shared_ptr<PropertyGrap
393395
make_uniq<ComparisonExpression>(ExpressionType::COMPARE_EQUAL, std::move(edge_to_ref), std::move(dst_cid_ref));
394396

395397
select_node->from_table = std::move(second_join_ref);
396-
397398
auto select_statement = make_uniq<SelectStatement>();
398399
select_statement->node = std::move(select_node);
399400

@@ -403,12 +404,7 @@ unique_ptr<CommonTableExpressionInfo> MakeEdgesCTE(const shared_ptr<PropertyGrap
403404
}
404405

405406
// Function to create the CTE for the Undirected CSR
406-
unique_ptr<CommonTableExpressionInfo> CreateUndirectedCSRCTE(const shared_ptr<PropertyGraphTable> &edge_table,
407-
const unique_ptr<SelectNode> &select_node) {
408-
if (select_node->cte_map.map.find("edges_cte") == select_node->cte_map.map.end()) {
409-
select_node->cte_map.map["edges_cte"] = MakeEdgesCTE(edge_table);
410-
}
411-
407+
unique_ptr<CommonTableExpressionInfo> CreateUndirectedCSRCTE(const shared_ptr<PropertyGraphTable> &edge_table) {
412408
auto csr_edge_id_constant = make_uniq<ConstantExpression>(Value::INTEGER(0));
413409
auto count_create_edge_select =
414410
GetCountTable(edge_table->source_pg_table, edge_table->source_reference, edge_table->source_pk[0]);
@@ -464,7 +460,6 @@ unique_ptr<CommonTableExpressionInfo> CreateUndirectedCSRCTE(const shared_ptr<Pr
464460
auto outer_select_edges_select_statement = make_uniq<SelectStatement>();
465461
outer_select_edges_select_statement->node = std::move(outer_select_edges_node);
466462
outer_select_node->from_table = make_uniq<SubqueryRef>(std::move(outer_select_edges_select_statement));
467-
468463
auto outer_select_statement = make_uniq<SelectStatement>();
469464
outer_select_statement->node = std::move(outer_select_node);
470465
auto info = make_uniq<CommonTableExpressionInfo>();

0 commit comments

Comments
 (0)