Skip to content
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

Update duckdb scanning grammar #3271

Merged
merged 1 commit into from
Apr 15, 2024
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
23 changes: 13 additions & 10 deletions extension/duckdb_scanner/test/test_files/duckdb_scanner.test
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
---- ok
-STATEMENT ATTACH '${KUZU_ROOT_DIRECTORY}/extension/duckdb_scanner/test/duckdb_database/tinysnb.db' as tinysnb (dbtype 'duckdb');
---- ok
-STATEMENT LOAD FROM tinysnb_person RETURN *;
-STATEMENT LOAD FROM tinysnb.person RETURN *;
---- 8
0|Alice|1|True|False|35|5.000000|1900-01-01|2011-08-20 11:25:30|3 years 2 days 13:02:00|[10,5]|[Aida]|[[10,8],[6,7,8]]|1.731000|a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
10|Hubert Blaine Wolfeschlegelsteinhausenbergerdorff|2|False|True|83|4.900000|1990-11-27|2023-02-21 13:25:30|3 years 2 days 13:02:00|[10,11,12,3,4,5,6,7]|[Ad,De,Hi,Kye,Orlan]|[[7],[10],[6,7]]|1.323000|a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a18
Expand All @@ -18,47 +18,50 @@
7|Elizabeth|1|False|True|20|4.700000|1980-10-26|1976-12-23 11:21:42|48:24:11|[2]|[Ein]|[[6],[7],[8]]|1.463000|a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a15
8|Farooq|2|True|False|25|4.500000|1980-10-26|1972-07-31 13:22:30.678559|00:18:00.024|[3,4,5,6,7]|[Fesdwe]|[[8]]|1.510000|a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a16
9|Greg|2|False|False|40|4.900000|1980-10-26|1976-12-23 11:21:42|10 years 5 months 13:00:00.000024|[1]|[Grad]|[[10]]|1.600000|a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a17
-STATEMENT LOAD FROM tinysnb_organisation RETURN *;
-STATEMENT LOAD FROM tinysnb.organisation RETURN *;
---- 3
1|ABFsUni|325|3.700000|-2|10 years 5 months 13 hours 24 us|3 years 5 days|1.000000|{revenue: 138, "location": ['toronto','montr,eal'], stock: {price: [96,56], volume: 1000}}|3.12
4|CsWork|934|4.100000|-100|2 years 4 days 10 hours|26 years 52 days 48:00:00|0.780000|{revenue: 152, "location": ["vanco,uver north area"], stock: {price: [15,78,671], volume: 432}}|abcd
6|DEsWork|824|4.100000|7|2 years 4 hours 22 us 34 minutes|82:00:00.1|0.520000|{revenue: 558, "location": ['very long city name','new york'], stock: {price: [22], volume: 99}}|2023-12-15
-STATEMENT LOAD FROM tinysnb_movies RETURN *;
-STATEMENT LOAD FROM tinysnb.movies RETURN *;
---- 3
Roma|298|the movie is very interesting and funny|{rating: 1223.000000, stars: 100, "views": 10003, "release": 2011-02-11 16:44:22, release_ns: 2011-02-11 16:44:22.123456, release_ms: 2011-02-11 16:44:22.123, release_sec: 2011-02-11 16:44:22, release_tz: 2011-02-11 16:44:22.123456+00, film: 2013-02-22, u8: 1, u16: 15, u32: 200, u64: 4, hugedata: -15}|pure ascii characters|{}
Sóló cón tu párejâ|126| this is a very very good movie|{rating: 5.300000, stars: 2, "views": 152, "release": 2011-08-20 11:25:30, release_ns: 2011-08-20 11:25:30.123456, release_ms: 2011-08-20 11:25:30.123, release_sec: 2011-08-20 11:25:30, release_tz: 2011-08-20 11:25:30.123456+00, film: 2012-05-11, u8: 220, u16: 20, u32: 1, u64: 180, hugedata: 1844674407370955161811111111}|\xAA\xABinteresting\x0B|{audience1=52, audience53=42}
The 😂😃🧘🏻‍♂️🌍🌦️🍞🚗 movie|2544| the movie is very very good|{rating: 7.000000, stars: 10, "views": 982, "release": 2018-11-13 13:33:11, release_ns: 2018-11-13 13:33:11.123456, release_ms: 2018-11-13 13:33:11.123, release_sec: 2018-11-13 13:33:11, release_tz: 2018-11-13 13:33:11.123456+00, film: 2014-09-12, u8: 12, u16: 120, u32: 55, u64: 1, hugedata: -1844674407370955161511}|\xAB\xCD|{audience1=33}
-STATEMENT LOAD FROM tinysnb_tableOfTypes RETURN count(*);
-STATEMENT LOAD FROM tinysnb.tableOfTypes RETURN count(*);
---- 1
49999
-STATEMENT LOAD FROM tinysnb_tableOfTypes WHERE id = 49992 or id = 28532 RETURN *;
-STATEMENT LOAD FROM tinysnb.tableOfTypes WHERE id = 49992 or id = 28532 RETURN *;
---- 2
28532|74|72.472423|True|1977-08-16|TKn|[94,92]|[AUSrJTUWVOESDor,ODOS6RfqMhsFO9aFUa,ziauQj]|[[123,55,181],[32]]|{ID: 666, "name": DiqSQ5u5UhS8aZi}
49992|50|31.582059|False|2056-05-02||[62,24,94]|[LpQO8OT3x45a]|[[268,281,166],[144,16,126,208,298],[22,287]]|{ID: 936, "name": sGPSafxMAhKiP}
-STATEMENT LOAD FROM tinysnb_person1 RETURN *;
-STATEMENT LOAD FROM tinysnb.person1 RETURN *;
---- error
Catalog exception: Table: person1 does not exist.
-STATEMENT DETACH tinysnb;
---- ok
-STATEMENT LOAD FROM tinysnb_person RETURN *;
-STATEMENT LOAD FROM tinysnb.person RETURN *;
---- error
Binder exception: No database named tinysnb has been attached.
-LOG AttachMultipleDuckDB
-STATEMENT ATTACH '${KUZU_ROOT_DIRECTORY}/extension/duckdb_scanner/test/duckdb_database/tinysnb.db' (dbtype 'duckdb');
---- ok
-STATEMENT ATTACH '${KUZU_ROOT_DIRECTORY}/extension/duckdb_scanner/test/duckdb_database/other.db' as other (dbtype 'duckdb');
---- ok
-STATEMENT LOAD FROM other_person RETURN *;
-STATEMENT LOAD FROM other.person RETURN *;
---- 4
1
2
3
5
-STATEMENT LOAD FROM tinysnb_person RETURN count(*);
-STATEMENT LOAD FROM tinysnb.person RETURN count(*);
---- 1
8

-CASE InvalidDuckDBDatabase
-STATEMENT LOAD FROM tinysnb1_person RETURN *;
-STATEMENT LOAD FROM tinysnb1.person RETURN *;
---- error
Binder exception: No database named tinysnb1 has been attached.
-STATEMENT LOAD FROM tinysnb1_person RETURN *;
---- error
Binder exception: Variable tinysnb1_person is not in scope.
14 changes: 7 additions & 7 deletions extension/postgres_scanner/test/test_files/postgres_scanner.test
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
---- ok
-STATEMENT ATTACH 'dbname=pgscan user=ci host=localhost' as tinysnb (dbtype 'POSTGRES');
---- ok
-STATEMENT LOAD FROM tinysnb_person RETURN *;
-STATEMENT LOAD FROM tinysnb.person RETURN *;
---- 8
0|Alice|1|True|False|35|5.000000|1900-01-01|2011-08-20 11:25:30|3 years 2 days 13:02:00|[10,5]|[Aida]|1.731000|a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
10|Hubert Blaine Wolfeschlegelsteinhausenbergerdorff|2|False|True|83|4.900000|1990-11-27|2023-02-21 13:25:30|3 years 2 days 13:02:00|[10,11,12,3,4,5,6,7]|[Ad,De,Hi,Kye,Orlan]|1.323000|a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a18
Expand All @@ -18,28 +18,28 @@
7|Elizabeth|1|False|True|20|4.700000|1980-10-26|1976-12-23 11:21:42|48:24:11|[2]|[Ein]|1.463000|a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a15
8|Farooq|2|True|False|25|4.500000|1980-10-26|1972-07-31 13:22:30.678559|00:18:00.024|[3,4,5,6,7]|[Fesdwe]|1.510000|a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a16
9|Greg|2|False|False|40|4.900000|1980-10-26|1976-12-23 11:21:42|10 years 5 months 13:00:00.000024|[1]|[Grad]|1.600000|a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a17
-STATEMENT LOAD FROM tinysnb_organisation RETURN *;
-STATEMENT LOAD FROM tinysnb.organisation RETURN *;
---- 3
1|ABFsUni|325|3.700000|-2|10 years 5 months 13:00:00.000024|3 years 5 days|1.000000|{revenue: 138, "location": [toronto,montr,eal]}|{price: [96,56], volume: 1000}|3.12
4|CsWork|934|4.100000|-100|2 years 4 days 10:00:00|26 years 52 days 48:00:00|0.780000|{revenue: 152, "location": [vanco,uver north area]}|{price: [15,78,671], volume: 432}|abcd
6|DEsWork|824|4.100000|7|2 years 04:34:00.000022|82:00:00.1|0.520000|{revenue: 558, "location": [very long city name,new york]}|{price: [22], volume: 99}|2023-12-15
-STATEMENT LOAD FROM tinysnb_movies RETURN *;
-STATEMENT LOAD FROM tinysnb.movies RETURN *;
---- 3
Roma|298|the movie is very interesting and funny|{rating: 1223.000000, stars: 100, "views": 10003, "release": 2011-02-11 16:44:22, release_ns: 2011-02-11 16:44:22, release_ms: 2011-02-11 16:44:22, release_sec: 2011-02-11 16:44:22, release_tz: 2011-02-11 08:44:22+00, film: 2013-02-22, u8: 1, u16: 15, u32: 200, u64: 4, hugedata: -15.000000}|pure ascii characters|[]
Sóló cón tu párejâ|126|this is a very very good movie|{rating: 5.300000, stars: 2, "views": 152, "release": 2011-08-20 11:25:30, release_ns: 2011-08-20 11:25:30, release_ms: 2011-08-20 11:25:30, release_sec: 2011-08-20 11:25:30, release_tz: 2011-08-20 03:25:30+00, film: 2012-05-11, u8: 220, u16: 20, u32: 1, u64: 180, hugedata: 1844674407370955161600000000.000000}|\x5CxAA\x5CxABinteresting\x5Cx0B|[{"key": audience1, "value": 52},{"key": audience53, "value": 42}]
The 😂😃🧘🏻‍♂️🌍🌦️🍞🚗 movie|2544|the movie is very very good|{rating: 7.000000, stars: 10, "views": 982, "release": 2018-11-13 13:33:11, release_ns: 2018-11-13 13:33:11, release_ms: 2018-11-13 13:33:11, release_sec: 2018-11-13 13:33:11, release_tz: 2018-11-13 05:33:11+00, film: 2014-09-12, u8: 12, u16: 120, u32: 55, u64: 1, hugedata: -1844674407370954899456.000000}|\x5CxAB\x5CxCD|[{"key": audience1, "value": 33}]
-STATEMENT LOAD FROM tinysnb_person1 RETURN *;
-STATEMENT LOAD FROM tinysnb.person1 RETURN *;
---- error
Catalog exception: Table: person1 does not exist.
-STATEMENT LOAD FROM tinysnb1_person RETURN *;
-STATEMENT LOAD FROM tinysnb1.person RETURN *;
---- error
Binder exception: No database named tinysnb1 has been attached.
-STATEMENT ATTACH 'dbname=pgscan user=ci host=localhost' (dbtype 'POSTGRES');
---- ok
-STATEMENT LOAD FROM pgscan_movies RETURN count(*);
-STATEMENT LOAD FROM pgscan.movies RETURN count(*);
---- 1
3
-STATEMENT LOAD FROM pgscan_movies where length > 2500 RETURN name;
-STATEMENT LOAD FROM pgscan.movies where length > 2500 RETURN name;
---- 1
The 😂😃🧘🏻‍♂️🌍🌦️🍞🚗 movie
# TODO(Ziyi): the error message is dependent on platforms. We have to implement regex in testing framework to handle this.
Expand Down
19 changes: 8 additions & 11 deletions scripts/antlr4/Cypher.g4.copy
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,12 @@ oC_Cypher

oC_Statement
: oC_Query
| kU_DDL
| kU_CreateNodeTable
| kU_CreateRelTable
| kU_CreateRelTableGroup
| kU_CreateRdfGraph
| kU_DropTable
| kU_AlterTable
| kU_CopyFrom
| kU_CopyFromByColumn
| kU_CopyTO
Expand All @@ -44,7 +49,8 @@ kU_ColumnNames
kU_ScanSource
: kU_FilePaths
| '(' SP? oC_Query SP? ')'
| oC_Variable ;
| oC_Variable
| oC_Variable '.' SP? oC_SchemaName ;

kU_CopyFromByColumn
: COPY SP oC_SchemaName SP FROM SP '(' SP? StringLiteral ( SP? ',' SP? StringLiteral )* ')' SP BY SP COLUMN ;
Expand Down Expand Up @@ -116,15 +122,6 @@ IMPORT: ( 'I' | 'i') ( 'M' | 'm') ( 'P' | 'p') ( 'O' | 'o') ( 'R' | 'r') ( 'T' |

DATABASE: ( 'D' | 'd') ( 'A' | 'a') ( 'T' | 't') ( 'A' | 'a') ( 'B' | 'b') ( 'A' | 'a') ( 'S' | 's')( 'E' | 'e');

kU_DDL
: kU_CreateNodeTable
| kU_CreateRelTable
| kU_CreateRelTableGroup
| kU_CreateRdfGraph
| kU_DropTable
| kU_AlterTable
;

kU_CreateNodeTable
: CREATE SP NODE SP TABLE SP oC_SchemaName SP? '(' SP? kU_PropertyDefinitions SP? ( ',' SP? kU_CreateNodeConstraint ) SP? ')' ;

Expand Down
19 changes: 8 additions & 11 deletions src/antlr4/Cypher.g4
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,12 @@ oC_Cypher

oC_Statement
: oC_Query
| kU_DDL
| kU_CreateNodeTable
| kU_CreateRelTable
| kU_CreateRelTableGroup
| kU_CreateRdfGraph
| kU_DropTable
| kU_AlterTable
| kU_CopyFrom
| kU_CopyFromByColumn
| kU_CopyTO
Expand All @@ -44,7 +49,8 @@ kU_ColumnNames
kU_ScanSource
: kU_FilePaths
| '(' SP? oC_Query SP? ')'
| oC_Variable ;
| oC_Variable
| oC_Variable '.' SP? oC_SchemaName ;

kU_CopyFromByColumn
: COPY SP oC_SchemaName SP FROM SP '(' SP? StringLiteral ( SP? ',' SP? StringLiteral )* ')' SP BY SP COLUMN ;
Expand Down Expand Up @@ -116,15 +122,6 @@ IMPORT: ( 'I' | 'i') ( 'M' | 'm') ( 'P' | 'p') ( 'O' | 'o') ( 'R' | 'r') ( 'T' |

DATABASE: ( 'D' | 'd') ( 'A' | 'a') ( 'T' | 't') ( 'A' | 'a') ( 'B' | 'b') ( 'A' | 'a') ( 'S' | 's')( 'E' | 'e');

kU_DDL
: kU_CreateNodeTable
| kU_CreateRelTable
| kU_CreateRelTableGroup
| kU_CreateRdfGraph
| kU_DropTable
| kU_AlterTable
;

kU_CreateNodeTable
: CREATE SP NODE SP TABLE SP oC_SchemaName SP? '(' SP? kU_PropertyDefinitions SP? ( ',' SP? kU_CreateNodeConstraint ) SP? ')' ;

Expand Down
7 changes: 4 additions & 3 deletions src/binder/bind/bind_file_scan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,10 @@ std::unique_ptr<BoundBaseScanSource> Binder::bindScanSource(BaseScanSource* sour
return std::make_unique<BoundQueryScanSource>(std::move(boundStatement));
}
case ScanSourceType::OBJECT: {
auto objectSource = ku_dynamic_cast<BaseScanSource*, ObjectScanSource*>(source);
throw BinderException(stringFormat("Scan from external object {} is not supported.",
objectSource->objectName));
auto objectSource = source->constPtrCast<ObjectScanSource>();
auto objectStr = StringUtils::join(objectSource->objectNames, ",");
throw BinderException(
stringFormat("Scan from external object {} is not supported.", objectStr));
}
default:
KU_UNREACHABLE;
Expand Down
35 changes: 21 additions & 14 deletions src/binder/bind/read/bind_load_from.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,31 +24,38 @@ std::unique_ptr<BoundReadingClause> Binder::bindLoadFrom(const ReadingClause& re
switch (source->type) {
case ScanSourceType::OBJECT: {
auto objectSource = source->constPtrCast<ObjectScanSource>();
auto objectName = objectSource->objectName;
if (objectName.find("_") == std::string::npos) {
// Bind table
KU_ASSERT(!objectSource->objectNames.empty());
if (objectSource->objectNames.size() == 1) {
// Bind external object as table
auto objectName = objectSource->objectNames[0];
auto replacementData = clientContext->tryReplace(objectName);
if (replacementData == nullptr) {
throw BinderException(ExceptionMessage::variableNotInScope(objectName));
}
scanFunction = replacementData->func;
bindData = scanFunction.bindFunc(clientContext, &replacementData->bindInput);
} else {
auto dbName = common::StringUtils::split(objectName, "_")[0];
auto attachedDB =
clientContext->getDatabase()->getDatabaseManagerUnsafe()->getAttachedDatabase(
dbName);
} else if (objectSource->objectNames.size() == 2) {
// Bind external database table
auto dbName = objectSource->objectNames[0];
auto attachedDB = clientContext->getDatabaseManager()->getAttachedDatabase(dbName);
if (attachedDB == nullptr) {
throw BinderException{
common::stringFormat("No database named {} has been attached.", dbName)};
stringFormat("No database named {} has been attached.", dbName)};
}
auto tableName = common::StringUtils::split(objectName, "_")[1];
auto tableID = attachedDB->getCatalogContent()->getTableID(tableName);
auto tableCatalogEntry = ku_dynamic_cast<CatalogEntry*, TableCatalogEntry*>(
attachedDB->getCatalogContent()->getTableCatalogEntry(tableID));
scanFunction = tableCatalogEntry->getScanFunction();
auto tableName = objectSource->objectNames[1];
auto attachedCatalog = attachedDB->getCatalogContent();
auto tableID = attachedCatalog->getTableID(tableName);
auto entry = attachedCatalog->getTableCatalogEntry(tableID);
auto tableEntry = ku_dynamic_cast<CatalogEntry*, TableCatalogEntry*>(entry);
scanFunction = tableEntry->getScanFunction();
auto bindInput = function::TableFuncBindInput();
bindData = scanFunction.bindFunc(clientContext, &bindInput);
} else {
// LCOV_EXCL_START
// The following should never happen.
auto objectStr = StringUtils::join(objectSource->objectNames, ",");
throw BinderException(stringFormat("Cannot find object {}.", objectStr));
// LCOV_EXCL_STOP
}
} break;
case ScanSourceType::FILE: {
Expand Down
10 changes: 3 additions & 7 deletions src/include/common/string_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,8 @@ namespace common {
class StringUtils {
public:
KUZU_API static std::vector<std::string> splitComma(const std::string& input);

KUZU_API static std::vector<std::string> split(const std::string& input,
const std::string& delimiter, bool ignoreEmptyStringParts = true);

static std::vector<std::string> splitBySpace(const std::string& input);

static void toUpper(std::string& input) {
Expand All @@ -34,24 +32,22 @@ class StringUtils {
static bool CharacterIsSpace(char c) {
return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r';
}

static bool CharacterIsDigit(char c) { return c >= '0' && c <= '9'; }

static inline std::string ltrim(const std::string& input) {
static std::string ltrim(const std::string& input) {
auto s = input;
s.erase(s.begin(),
find_if(s.begin(), s.end(), [](unsigned char ch) { return !isspace(ch); }));
return s;
}

static inline std::string rtrim(const std::string& input) {
static std::string rtrim(const std::string& input) {
auto s = input;
s.erase(find_if(s.rbegin(), s.rend(), [](unsigned char ch) { return !isspace(ch); }).base(),
s.end());
return s;
}

static inline void removeWhiteSpaces(std::string& str) {
static void removeWhiteSpaces(std::string& str) {
std::regex whiteSpacePattern{"\\s"};
str = std::regex_replace(str, whiteSpacePattern, "");
}
Expand Down
2 changes: 2 additions & 0 deletions src/include/main/client_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ struct ExtensionOptions;

namespace main {
class Database;
class DatabaseManager;

struct ActiveQuery {
explicit ActiveQuery();
Expand Down Expand Up @@ -90,6 +91,7 @@ class ClientContext {

// Database component getters.
KUZU_API Database* getDatabase() const { return database; }
DatabaseManager* getDatabaseManager() const;
storage::StorageManager* getStorageManager() const;
KUZU_API storage::MemoryManager* getMemoryManager();
catalog::Catalog* getCatalog() const;
Expand Down
2 changes: 0 additions & 2 deletions src/include/main/database.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,6 @@ class Database {
common::case_insensitive_map_t<std::unique_ptr<storage::StorageExtension>>&
getStorageExtensions();

DatabaseManager* getDatabaseManagerUnsafe() const;

private:
void openLockFile();
void initDBDirAndCoreFilesIfNecessary();
Expand Down
8 changes: 5 additions & 3 deletions src/include/parser/scan_source.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@ struct FileScanSource : public BaseScanSource {
};

struct ObjectScanSource : public BaseScanSource {
std::string objectName;
// If multiple object presents, assuming they have a nested structure.
// E.g. for postgres.person, objectNames should be [postgres, person]
std::vector<std::string> objectNames;

explicit ObjectScanSource(std::string objectName)
: BaseScanSource{common::ScanSourceType::OBJECT}, objectName{std::move(objectName)} {}
explicit ObjectScanSource(std::vector<std::string> objectNames)
: BaseScanSource{common::ScanSourceType::OBJECT}, objectNames{std::move(objectNames)} {}
};

struct QueryScanSource : public BaseScanSource {
Expand Down
1 change: 0 additions & 1 deletion src/include/parser/transformer.h
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,6 @@ class Transformer {
CypherParser::OC_DoubleLiteralContext& ctx);

// Transform ddl.
std::unique_ptr<Statement> transformDDL(CypherParser::KU_DDLContext& ctx);
std::unique_ptr<Statement> transformAlterTable(CypherParser::KU_AlterTableContext& ctx);
std::unique_ptr<Statement> transformCreateNodeTable(
CypherParser::KU_CreateNodeTableContext& ctx);
Expand Down
4 changes: 4 additions & 0 deletions src/main/client_context.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,10 @@ std::string ClientContext::getExtensionDir() const {
return common::stringFormat("{}/.kuzu/extension", config.homeDirectory);
}

DatabaseManager* ClientContext::getDatabaseManager() const {
return database->databaseManager.get();
}

storage::StorageManager* ClientContext::getStorageManager() const {
return database->storageManager.get();
}
Expand Down
4 changes: 0 additions & 4 deletions src/main/database.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,10 +137,6 @@ Database::getStorageExtensions() {
return storageExtensions;
}

DatabaseManager* Database::getDatabaseManagerUnsafe() const {
return databaseManager.get();
}

void Database::openLockFile() {
int flags;
FileLockType lock;
Expand Down
11 changes: 7 additions & 4 deletions src/parser/transform/transform_copy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,14 @@ std::unique_ptr<BaseScanSource> Transformer::transformScanSource(
auto query = transformQuery(*ctx.oC_Query());
return std::make_unique<QueryScanSource>(std::move(query));
} else if (ctx.oC_Variable()) {
auto variable = transformVariable(*ctx.oC_Variable());
return std::make_unique<ObjectScanSource>(std::move(variable));
} else {
KU_UNREACHABLE;
std::vector<std::string> objectNames;
objectNames.push_back(transformVariable(*ctx.oC_Variable()));
if (ctx.oC_SchemaName()) {
objectNames.push_back(transformSchemaName(*ctx.oC_SchemaName()));
}
return std::make_unique<ObjectScanSource>(std::move(objectNames));
}
KU_UNREACHABLE;
}

parsing_option_t Transformer::transformParsingOptions(CypherParser::KU_ParsingOptionsContext& ctx) {
Expand Down
Loading
Loading