Skip to content

Commit

Permalink
Update duckdb scanning grammar (#3271)
Browse files Browse the repository at this point in the history
  • Loading branch information
andyfengHKU committed Apr 15, 2024
1 parent d7bdcbf commit fe1eccc
Show file tree
Hide file tree
Showing 21 changed files with 2,814 additions and 2,873 deletions.
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

0 comments on commit fe1eccc

Please sign in to comment.