Skip to content
This repository was archived by the owner on Oct 10, 2025. It is now read-only.

Commit 18041a8

Browse files
committed
draft
1 parent 4dde7bf commit 18041a8

File tree

6 files changed

+42
-7
lines changed

6 files changed

+42
-7
lines changed

extension/duckdb/test/test_files/external_table.test

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,40 @@
44

55
-CASE ExternalDuckDBTable
66

7+
-STATEMENT load extension "${KUZU_ROOT_DIRECTORY}/extension/duckdb/build/libduckdb.kuzu_extension"
8+
---- ok
9+
-STATEMENT ATTACH '${KUZU_ROOT_DIRECTORY}/dataset/databases/duckdb_database/tinysnb.db' as tinysnb (dbtype duckdb, skip_unsupported_table = true);
10+
---- 1
11+
Attached database successfully.
12+
-STATEMENT BEGIN TRANSACTION;
13+
---- ok
14+
-STATEMENT CREATE EXTERNAL NODE TABLE duck_person AS tinysnb.person (PRIMARY KEY (ID));
15+
---- ok
16+
-STATEMENT COMMIT;
17+
---- ok
18+
-RELOADDB
19+
-STATEMENT CALL SHOW_TABLES() RETURN *;
20+
---- 1
21+
duck_person|EXTERNAL_NODE|local(kuzu)|
22+
-STATEMENT BEGIN TRANSACTION;
23+
---- ok
24+
-STATEMENT ALTER TABLE duck_person RENAME TO d_person;
25+
---- ok
26+
-STATEMENT COMMIT;
27+
---- ok
28+
-RELOADDB
29+
-STATEMENT CALL SHOW_TABLES() RETURN *;
30+
---- 1
31+
d_person|EXTERNAL_NODE|local(kuzu)|
32+
-STATEMENT BEGIN TRANSACTION;
33+
---- ok
34+
-STATEMENT DROP TABLE d_person;
35+
---- ok
36+
-STATEMENT COMMIT;
37+
---- ok
38+
-RELOADDB
39+
-STATEMENT CALL SHOW_TABLES() RETURN *;
40+
---- 0
741
-STATEMENT load extension "${KUZU_ROOT_DIRECTORY}/extension/duckdb/build/libduckdb.kuzu_extension"
842
---- ok
943
-STATEMENT ATTACH '${KUZU_ROOT_DIRECTORY}/dataset/databases/duckdb_database/tinysnb.db' as tinysnb (dbtype duckdb, skip_unsupported_table = true);

src/catalog/catalog_entry/catalog_entry.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ std::unique_ptr<CatalogEntry> CatalogEntry::deserialize(common::Deserializer& de
3737
std::unique_ptr<CatalogEntry> entry;
3838
switch (type) {
3939
case CatalogEntryType::NODE_TABLE_ENTRY:
40+
case CatalogEntryType::EXTERNAL_NODE_TABLE_ENTRY:
4041
case CatalogEntryType::REL_TABLE_ENTRY:
4142
case CatalogEntryType::REL_GROUP_ENTRY:
4243
case CatalogEntryType::RDF_GRAPH_ENTRY: {

src/catalog/catalog_entry/external_table_catalog_entry.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ std::unique_ptr<ExternalTableCatalogEntry> ExternalTableCatalogEntry::deserializ
2929
std::string externalTableName;
3030
deserializer.deserializeValue(externalDBName);
3131
deserializer.deserializeValue(externalTableName);
32-
auto physicalEntry = TableCatalogEntry::deserialize(deserializer, type);
32+
auto physicalEntry = CatalogEntry::deserialize(deserializer);
3333
std::unique_ptr<ExternalTableCatalogEntry> entry;
3434
switch (type) {
3535
case CatalogEntryType::EXTERNAL_NODE_TABLE_ENTRY: {
@@ -40,7 +40,7 @@ std::unique_ptr<ExternalTableCatalogEntry> ExternalTableCatalogEntry::deserializ
4040
}
4141
entry->externalDBName = externalDBName;
4242
entry->externalTableName = externalTableName;
43-
entry->physicalEntry = std::move(physicalEntry);
43+
entry->physicalEntry = physicalEntry->ptrCast<TableCatalogEntry>()->copy();
4444
return entry;
4545
}
4646

src/catalog/catalog_entry/table_catalog_entry.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,12 @@ std::unique_ptr<TableCatalogEntry> TableCatalogEntry::deserialize(
117117
case CatalogEntryType::NODE_TABLE_ENTRY: {
118118
result = NodeTableCatalogEntry::deserialize(deserializer);
119119
} break;
120-
case CatalogEntryType::REL_TABLE_ENTRY: {
121-
result = RelTableCatalogEntry::deserialize(deserializer);
122-
} break;
123120
case CatalogEntryType::EXTERNAL_NODE_TABLE_ENTRY: {
124121
result = ExternalTableCatalogEntry::deserialize(deserializer, type);
125122
} break ;
123+
case CatalogEntryType::REL_TABLE_ENTRY: {
124+
result = RelTableCatalogEntry::deserialize(deserializer);
125+
} break;
126126
case CatalogEntryType::REL_GROUP_ENTRY: {
127127
result = RelGroupCatalogEntry::deserialize(deserializer);
128128
} break;

src/catalog/catalog_set.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ oid_t CatalogSet::createEntry(Transaction* transaction, std::unique_ptr<CatalogE
7070
std::lock_guard lck{mtx};
7171
oid = nextOID++;
7272
entry->setOID(oid);
73-
// TODO(Guodong): Fix me
7473
if (entry->getType() == CatalogEntryType::EXTERNAL_NODE_TABLE_ENTRY) {
7574
entry->ptrCast<ExternalNodeTableCatalogEntry>()->getPhysicalEntry()->setOID(nextOID++);
7675
}
@@ -83,7 +82,6 @@ oid_t CatalogSet::createEntry(Transaction* transaction, std::unique_ptr<CatalogE
8382

8483
CatalogEntry* CatalogSet::createEntryNoLock(const Transaction* transaction,
8584
std::unique_ptr<CatalogEntry> entry) {
86-
8785
// LCOV_EXCL_START
8886
validateNotExistNoLock(transaction, entry->getName());
8987
// LCOV_EXCL_STOP
@@ -180,6 +178,7 @@ void CatalogSet::alterEntry(Transaction* transaction, const binder::BoundAlterIn
180178
// LCOV_EXCL_STOP
181179
entry = getEntryNoLock(transaction, alterInfo.tableName);
182180
KU_ASSERT(entry->getType() == CatalogEntryType::NODE_TABLE_ENTRY ||
181+
entry->getType() == CatalogEntryType::EXTERNAL_NODE_TABLE_ENTRY ||
183182
entry->getType() == CatalogEntryType::REL_TABLE_ENTRY ||
184183
entry->getType() == CatalogEntryType::REL_GROUP_ENTRY ||
185184
entry->getType() == CatalogEntryType::RDF_GRAPH_ENTRY);

src/transaction/transaction.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ void Transaction::pushCatalogEntry(CatalogSet& catalogSet, CatalogEntry& catalog
108108
switch (catalogEntry.getType()) {
109109
// Eventually we probably want to merge these
110110
case CatalogEntryType::NODE_TABLE_ENTRY:
111+
case CatalogEntryType::EXTERNAL_NODE_TABLE_ENTRY:
111112
case CatalogEntryType::REL_TABLE_ENTRY:
112113
case CatalogEntryType::REL_GROUP_ENTRY:
113114
case CatalogEntryType::RDF_GRAPH_ENTRY: {

0 commit comments

Comments
 (0)