Skip to content

Commit

Permalink
Enable map type in rel table
Browse files Browse the repository at this point in the history
See #2184
  • Loading branch information
benjaminwinger committed Dec 18, 2023
1 parent 1a33e48 commit bd23d12
Show file tree
Hide file tree
Showing 21 changed files with 110 additions and 82 deletions.
28 changes: 14 additions & 14 deletions dataset/tinysnb/eKnows.csv
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
0,2,2021-06-30,1986-10-21 21:08:31.521,10 years 5 months 13 hours 24 us,"[rnme,m8sihsdnf2990nfiwf]","{locations:['toronto','waterloo'], transfer: {day: 2021-01-02, amount: [100, 200]}}",1
0,3,2021-06-30,1946-08-25 19:07:22,20 years 30 days 48 hours,"[njnojppo9u0jkmf,fjiojioh9h9h89hph]","{}",2020-10-10
0,5,2021-06-30,2012-12-11 20:07:22,10 days,"[ioji232,jifhe8w99u43434]","{locations:['shanghai'], transfer: {day: 1990-09-10, amount: [10]}}","nice weather"
2,0,2021-06-30,1946-08-25 19:07:22,10 years 5 months 13 hours 24 us,"[2huh9y89fsfw23,23nsihufhw723]","{locations:['paris'], transfer: {day: 2000-01-01, amount: [20, 5000]}}",4
2,3,1950-05-14,1946-08-25 19:07:22,23 minutes,"[fwehu9h9832wewew,23u9h989sdfsss]","{locations:['paris'], transfer: {day: 2011-05-01, amount: [2000, 5340]}}","cool stuff found"
2,5,1950-05-14,2012-12-11 20:07:22,20 years 30 days 48 hours,"[fwh9y81232uisuiehuf,ewnuihxy8dyf232]","{locations:['vancouver'], transfer: {day: 2020-01-01, amount: [120, 50]}}","matthew perry"
3,0,2021-06-30,2002-07-31 11:42:53.12342,30 hours 40 days,"[fnioh8323aeweae34d,osd89e2ejshuih12]","{locations:['london','toronto'], transfer: {day: 2012-11-21, amount: [223, 5230]}}",10
3,2,1950-05-14,2007-02-12 12:11:42.123,28 minutes 30 milliseconds,"[fwh983-sdjisdfji,ioh89y32r2huir]","{locations:['paris','beijing'], transfer: {day: 2011-03-11, amount: [2323, 50]}}",1
3,5,2000-01-01,1998-10-02 13:09:22.423,300 milliseconds,"[psh989823oaaioe,nuiuah1nosndfisf]","{locations:[], transfer: {day: 1980-11-21, amount: [20, 5]}}",2
5,0,2021-06-30,1936-11-02 11:02:01,480us,"[fwewe]","{locations:['shanghai','nanjing'], transfer: {day: 1998-11-12, amount: [22, 53240]}}",15
5,2,1950-05-14,1982-11-11 13:12:05.123,23 minutes,"[fewh9182912e3,h9y8y89soidfsf,nuhudf78w78efw,hioshe0f9023sdsd]","{locations:['paris'], transfer: {day: 2000-01-01, amount: [20, 5000]}}","happy new year"
5,3,2000-01-01,1999-04-21 15:12:11.42,48 hours 52 milliseconds,"[23h9sdslnfowhu2932,shuhf98922323sf]","{locations:['paris'], transfer: {day: 2000-01-01, amount: [20, 5000]}}",4
7,8,1905-12-12,2025-01-01 11:22:33.52,47 minutes 58 seconds,"[ahu2333333333333,12weeeeeeeeeeeeeeeeee]","{locations:['toronto','thisisalongcityname'], transfer: {day: 1930-11-22, amount: [18, 323]}}",8
7,9,1905-12-12,2020-03-01 12:11:41.6552,47 minutes 58 seconds,"[peweeeeeeeeeeeeeeeee,kowje9w0eweeeeeeeee]","{locations:['waterloo'], transfer: {day: 2000-01-01, amount: [1000, 5000]}}",10
0,2,2021-06-30,1986-10-21 21:08:31.521,10 years 5 months 13 hours 24 us,"[rnme,m8sihsdnf2990nfiwf]","{locations:['toronto','waterloo'], transfer: {day: 2021-01-02, amount: [100, 200]}}",1,{a=b}
0,3,2021-06-30,1946-08-25 19:07:22,20 years 30 days 48 hours,"[njnojppo9u0jkmf,fjiojioh9h9h89hph]","{}",2020-10-10,"{c=d, e=f, 1=2}"
0,5,2021-06-30,2012-12-11 20:07:22,10 days,"[ioji232,jifhe8w99u43434]","{locations:['shanghai'], transfer: {day: 1990-09-10, amount: [10]}}","nice weather",
2,0,2021-06-30,1946-08-25 19:07:22,10 years 5 months 13 hours 24 us,"[2huh9y89fsfw23,23nsihufhw723]","{locations:['paris'], transfer: {day: 2000-01-01, amount: [20, 5000]}}",4,
2,3,1950-05-14,1946-08-25 19:07:22,23 minutes,"[fwehu9h9832wewew,23u9h989sdfsss]","{locations:['paris'], transfer: {day: 2011-05-01, amount: [2000, 5340]}}","cool stuff found",
2,5,1950-05-14,2012-12-11 20:07:22,20 years 30 days 48 hours,"[fwh9y81232uisuiehuf,ewnuihxy8dyf232]","{locations:['vancouver'], transfer: {day: 2020-01-01, amount: [120, 50]}}","matthew perry",
3,0,2021-06-30,2002-07-31 11:42:53.12342,30 hours 40 days,"[fnioh8323aeweae34d,osd89e2ejshuih12]","{locations:['london','toronto'], transfer: {day: 2012-11-21, amount: [223, 5230]}}",10,
3,2,1950-05-14,2007-02-12 12:11:42.123,28 minutes 30 milliseconds,"[fwh983-sdjisdfji,ioh89y32r2huir]","{locations:['paris','beijing'], transfer: {day: 2011-03-11, amount: [2323, 50]}}",1,
3,5,2000-01-01,1998-10-02 13:09:22.423,300 milliseconds,"[psh989823oaaioe,nuiuah1nosndfisf]","{locations:[], transfer: {day: 1980-11-21, amount: [20, 5]}}",2,
5,0,2021-06-30,1936-11-02 11:02:01,480us,"[fwewe]","{locations:['shanghai','nanjing'], transfer: {day: 1998-11-12, amount: [22, 53240]}}",15,
5,2,1950-05-14,1982-11-11 13:12:05.123,23 minutes,"[fewh9182912e3,h9y8y89soidfsf,nuhudf78w78efw,hioshe0f9023sdsd]","{locations:['paris'], transfer: {day: 2000-01-01, amount: [20, 5000]}}","happy new year",
5,3,2000-01-01,1999-04-21 15:12:11.42,48 hours 52 milliseconds,"[23h9sdslnfowhu2932,shuhf98922323sf]","{locations:['paris'], transfer: {day: 2000-01-01, amount: [20, 5000]}}",4,
7,8,1905-12-12,2025-01-01 11:22:33.52,47 minutes 58 seconds,"[ahu2333333333333,12weeeeeeeeeeeeeeeeee]","{locations:['toronto','thisisalongcityname'], transfer: {day: 1930-11-22, amount: [18, 323]}}",8,
7,9,1905-12-12,2020-03-01 12:11:41.6552,47 minutes 58 seconds,"[peweeeeeeeeeeeeeeeee,kowje9w0eweeeeeeeee]","{locations:['waterloo'], transfer: {day: 2000-01-01, amount: [1000, 5000]}}",10,
2 changes: 1 addition & 1 deletion dataset/tinysnb/schema.cypher
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
create node table person (ID INt64, fName StRING, gender INT64, isStudent BoOLEAN, isWorker BOOLEAN, age INT64, eyeSight DOUBLE, birthdate DATE, registerTime TIMESTAMP, lastJobDuration interval, workedHours INT64[], usedNames STRING[], courseScoresPerTerm INT64[][], grades INT64[4], height float, PRIMARY KEY (ID));
create node table organisation (ID INT64, name STRING, orgCode INT64, mark DOUBLE, score INT64, history STRING, licenseValidInterval INTERVAL, rating DOUBLE, state STRUCT(revenue INT16, location STRING[], stock STRUCT(price INT64[], volume INT64)), info UNION(price FLOAT, movein DATE, note STRING),PRIMARY KEY (ID));
create node table movies (name STRING, length INT32, note STRING, description STRUCT(rating DOUBLE, stars INT8, views INT64, release TIMESTAMP, release_ns TIMESTAMP_NS, release_ms TIMESTAMP_MS, release_sec TIMESTAMP_SEC, release_tz TIMESTAMP_TZ, film DATE, u8 UINT8, u16 UINT16, u32 UINT32, u64 UINT64, hugedata INT128), content BYTEA, audience MAP(STRING, INT64), grade union(credit boolean, grade1 double, grade2 int64), PRIMARY KEY (name));
create rel table knows (FROM person TO person, date DATE, meetTime TIMESTAMP, validInterval INTERVAL, comments STRING[], summary STRUCT(locations STRING[], transfer STRUCT(day DATE, amount INT64[])), notes UNION(firstmet DATE, type INT16, comment STRING), MANY_MANY);
create rel table knows (FROM person TO person, date DATE, meetTime TIMESTAMP, validInterval INTERVAL, comments STRING[], summary STRUCT(locations STRING[], transfer STRUCT(day DATE, amount INT64[])), notes UNION(firstmet DATE, type INT16, comment STRING), someMap MAP(STRING, STRING), MANY_MANY);
create rel table studyAt (FROM person TO organisation, year INT64, places STRING[], length INT16, level INT8, code UINT64, temprature UINT32, ulength UINT16, ulevel UINT8, hugedata INT128, MANY_ONE);
create rel table workAt (FROM person TO organisation, year INT64, grading DOUBLE[2], rating float, MANY_ONE);
create rel table meets (FROM person TO person, location FLOAT[2], times INT, data BYTEA, MANY_ONE);
Expand Down
8 changes: 3 additions & 5 deletions src/binder/bind/bind_ddl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,12 @@ std::unique_ptr<BoundCreateTableInfo> Binder::bindCreateNodeTableInfo(const Crea

std::unique_ptr<BoundCreateTableInfo> Binder::bindCreateRelTableInfo(const CreateTableInfo* info) {
auto boundProperties = bindProperties(info->propertyNameDataTypes);
auto extraInfo = (ExtraCreateRelTableInfo*)info->extraInfo.get();
for (auto& boundProperty : boundProperties) {
if (boundProperty->getDataType()->getLogicalTypeID() == LogicalTypeID::SERIAL ||
boundProperty->getDataType()->getLogicalTypeID() == LogicalTypeID::MAP) {
throw BinderException(stringFormat("{} property is not supported in rel table.",
boundProperty->getDataType()->toString()));
if (boundProperty->getDataType()->getLogicalTypeID() == LogicalTypeID::SERIAL) {
throw BinderException("SERIAL properties are not supported in rel tables.");
}
}
auto extraInfo = (ExtraCreateRelTableInfo*)info->extraInfo.get();
auto srcMultiplicity = RelMultiplicityUtils::getFwd(extraInfo->relMultiplicity);
auto dstMultiplicity = RelMultiplicityUtils::getBwd(extraInfo->relMultiplicity);
auto srcTableID = bindTableID(extraInfo->srcTableName);
Expand Down
2 changes: 1 addition & 1 deletion test/c_api/value_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -777,7 +777,7 @@ TEST_F(CApiValueTest, GetRelVal) {
auto relLabelStr = kuzu_value_get_string(relLabel);
ASSERT_STREQ(relLabelStr, "knows");
auto propertiesSize = kuzu_rel_val_get_property_size(rel);
ASSERT_EQ(propertiesSize, 6);
ASSERT_EQ(propertiesSize, 7);
free(relLabelStr);
kuzu_value_destroy(relLabel);
kuzu_value_destroy(relSrcIDVal);
Expand Down
5 changes: 4 additions & 1 deletion test/runner/e2e_copy_transaction_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ class TinySnbCopyCSVTransactionTest : public EmptyDBTest {
void copyNodeCSVCommitAndRecoveryTest(TransactionTestType transactionTestType) {
conn->query(createPersonTableCMD);
auto preparedStatement = conn->prepare(copyPersonTableCMD);
if (!preparedStatement->success) {
ASSERT_TRUE(false) << preparedStatement->errMsg;
}
auto mapper = PlanMapper(
*getStorageManager(*database), getMemoryManager(*database), getCatalog(*database));
auto physicalPlan =
Expand Down Expand Up @@ -171,7 +174,7 @@ class TinySnbCopyCSVTransactionTest : public EmptyDBTest {
"create rel table knows (FROM person TO person, date DATE, meetTime TIMESTAMP, "
"validInterval INTERVAL, comments STRING[], summary STRUCT(locations STRING[], transfer "
"STRUCT(day DATE, amount INT64[])), notes UNION(firstmet DATE, type INT16, comment "
"STRING), MANY_MANY);";
"STRING), someMap MAP(STRING, STRING), MANY_MANY);";
std::string copyKnowsTableCMD =
"COPY knows FROM \"" + TestHelper::appendKuzuRootPath("dataset/tinysnb/eKnows.csv\"");
std::unique_ptr<Profiler> profiler;
Expand Down
22 changes: 11 additions & 11 deletions test/test_files/copy/copy_partial_column.test
Original file line number Diff line number Diff line change
Expand Up @@ -14,33 +14,33 @@
---- ok
-STATEMENT CREATE REL TABLE knows1 (FROM person TO person, nullDouble DOUBLE, date DATE, meetTime TIMESTAMP,
validInterval INTERVAL, comments STRING[], summary STRUCT(locations STRING[],
transfer STRUCT(day DATE, amount INT64[])), notes UNION(firstmet DATE, type INT16, comment STRING), MANY_MANY);
transfer STRUCT(day DATE, amount INT64[])), notes UNION(firstmet DATE, type INT16, comment STRING), someMap MAP(STRING, STRING), MANY_MANY);
---- ok
-STATEMENT COPY knows1 (date, meetTime, validInterval, comments, summary, notes) FROM "${KUZU_ROOT_DIRECTORY}/dataset/tinysnb/eKnows.csv" ;
-STATEMENT COPY knows1 (date, meetTime, validInterval, comments, summary, notes, someMap) FROM "${KUZU_ROOT_DIRECTORY}/dataset/tinysnb/eKnows.csv" ;
---- ok
-STATEMENT MATCH (p:person)-[e:knows1]->(:person) WHERE p.ID = 2 RETURN e.*;
---- 3
|1950-05-14|1946-08-25 19:07:22|00:23:00|[fwehu9h9832wewew,23u9h989sdfsss]|{locations: ['paris'], transfer: {day: 2011-05-01, amount: [2000,5340]}}|cool stuff found
|1950-05-14|2012-12-11 20:07:22|20 years 30 days 48:00:00|[fwh9y81232uisuiehuf,ewnuihxy8dyf232]|{locations: ['vancouver'], transfer: {day: 2020-01-01, amount: [120,50]}}|matthew perry
|2021-06-30|1946-08-25 19:07:22|10 years 5 months 13:00:00.000024|[2huh9y89fsfw23,23nsihufhw723]|{locations: ['paris'], transfer: {day: 2000-01-01, amount: [20,5000]}}|4
|1950-05-14|1946-08-25 19:07:22|00:23:00|[fwehu9h9832wewew,23u9h989sdfsss]|{locations: ['paris'], transfer: {day: 2011-05-01, amount: [2000,5340]}}|cool stuff found|
|1950-05-14|2012-12-11 20:07:22|20 years 30 days 48:00:00|[fwh9y81232uisuiehuf,ewnuihxy8dyf232]|{locations: ['vancouver'], transfer: {day: 2020-01-01, amount: [120,50]}}|matthew perry|
|2021-06-30|1946-08-25 19:07:22|10 years 5 months 13:00:00.000024|[2huh9y89fsfw23,23nsihufhw723]|{locations: ['paris'], transfer: {day: 2000-01-01, amount: [20,5000]}}|4|
-STATEMENT CREATE REL TABLE knows2 (FROM person TO person,notes UNION(firstmet DATE, type INT16, comment STRING),
meetTime TIMESTAMP,nullDouble DOUBLE, date DATE, validInterval INTERVAL, comments STRING[],
summary STRUCT(locations STRING[], transfer STRUCT(day DATE, amount INT64[])), MANY_MANY);
summary STRUCT(locations STRING[], transfer STRUCT(day DATE, amount INT64[])), someMap MAP(STRING, STRING), MANY_MANY);
---- ok
-STATEMENT COPY knows2 (date, meetTime, validInterval, comments, summary, notes) FROM "${KUZU_ROOT_DIRECTORY}/dataset/tinysnb/eKnows.csv" ;
-STATEMENT COPY knows2 (date, meetTime, validInterval, comments, summary, notes, someMap) FROM "${KUZU_ROOT_DIRECTORY}/dataset/tinysnb/eKnows.csv" ;
---- ok
-STATEMENT MATCH (p:person)-[e:knows2]->(:person) WHERE p.ID = 2 RETURN e.*;
---- 3
4|1946-08-25 19:07:22||2021-06-30|10 years 5 months 13:00:00.000024|[2huh9y89fsfw23,23nsihufhw723]|{locations: ['paris'], transfer: {day: 2000-01-01, amount: [20,5000]}}
cool stuff found|1946-08-25 19:07:22||1950-05-14|00:23:00|[fwehu9h9832wewew,23u9h989sdfsss]|{locations: ['paris'], transfer: {day: 2011-05-01, amount: [2000,5340]}}
matthew perry|2012-12-11 20:07:22||1950-05-14|20 years 30 days 48:00:00|[fwh9y81232uisuiehuf,ewnuihxy8dyf232]|{locations: ['vancouver'], transfer: {day: 2020-01-01, amount: [120,50]}}
4|1946-08-25 19:07:22||2021-06-30|10 years 5 months 13:00:00.000024|[2huh9y89fsfw23,23nsihufhw723]|{locations: ['paris'], transfer: {day: 2000-01-01, amount: [20,5000]}}|
cool stuff found|1946-08-25 19:07:22||1950-05-14|00:23:00|[fwehu9h9832wewew,23u9h989sdfsss]|{locations: ['paris'], transfer: {day: 2011-05-01, amount: [2000,5340]}}|
matthew perry|2012-12-11 20:07:22||1950-05-14|20 years 30 days 48:00:00|[fwh9y81232uisuiehuf,ewnuihxy8dyf232]|{locations: ['vancouver'], transfer: {day: 2020-01-01, amount: [120,50]}}|
-STATEMENT CREATE REL TABLE knows3 (FROM person TO person, a INT16, notes UNION(firstmet DATE, type INT16, comment STRING),
meetTime TIMESTAMP,nullDouble DOUBLE, date DATE, validInterval INTERVAL, comments STRING[],
summary STRUCT(locations STRING[], transfer STRUCT(day DATE, amount INT64[])), MANY_MANY);
---- ok
-STATEMENT COPY knows3 (meetTime, date, validInterval, comments, summary) FROM "${KUZU_ROOT_DIRECTORY}/dataset/tinysnb/eKnows.csv" ;
---- error
Binder exception: Number of columns mismatch. Expected 7 but got 8.
Binder exception: Number of columns mismatch. Expected 7 but got 9.
-STATEMENT COPY knows3 (meetTime, date, validInterval, comments, summary, dummy) FROM "${KUZU_ROOT_DIRECTORY}/dataset/tinysnb/eKnows.csv" ;
---- error
Binder exception: Table knows3 does not contain column dummy.
Expand Down
2 changes: 1 addition & 1 deletion test/test_files/exceptions/binder/binder_error.test
Original file line number Diff line number Diff line change
Expand Up @@ -522,7 +522,7 @@ Binder exception: Serial property in node table must be the primary key.
-LOG SerialInRelTable
-STATEMENT CREATE REL TABLE test(FROM person TO person, seq SERIAL)
---- error
Binder exception: SERIAL property is not supported in rel table.
Binder exception: SERIAL properties are not supported in rel tables.

-LOG MatchBuiltIn
-STATEMENT MATCH (a:person) RETURN a.age + 'hh'
Expand Down
2 changes: 1 addition & 1 deletion test/test_files/exceptions/copy/auto_commit.test
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ DDL, Copy, createMacro statements can only run in the AUTO_COMMIT mode. Please c
-STATEMENT COPY person FROM "${KUZU_ROOT_DIRECTORY}/dataset/tinysnb/vPerson.csv" (HEADER=TRUE, DELIM=',')
---- 1
8 number of tuples has been copied to table: person.
-STATEMENT create rel table knows (FROM person TO person, date DATE, meetTime TIMESTAMP, validInterval INTERVAL, comments STRING[], summary STRUCT(locations STRING[], transfer STRUCT(day DATE, amount INT64[])), notes UNION(firstmet DATE, type INT16, comment STRING), MANY_MANY)
-STATEMENT create rel table knows (FROM person TO person, date DATE, meetTime TIMESTAMP, validInterval INTERVAL, comments STRING[], summary STRUCT(locations STRING[], transfer STRUCT(day DATE, amount INT64[])), notes UNION(firstmet DATE, type INT16, comment STRING), someMap MAP(STRING, STRING), MANY_MANY)
---- ok
-STATEMENT COPY knows FROM "${KUZU_ROOT_DIRECTORY}/dataset/tinysnb/eKnows.csv"
---- 1
Expand Down
13 changes: 9 additions & 4 deletions test/test_files/issue/issue.test
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,16 @@
-STATEMENT CREATE NODE TABLE T2(name STRING, myprops MAP(STRING,STRING), PRIMARY KEY(name));
---- ok
-STATEMENT CREATE REL TABLE KIND_OF3(FROM T TO T, myprops MAP(STRING,STRING));
---- ok
-STATEMENT CREATE REL TABLE KIND_OF4(FROM T TO T, myprops SERIAL);
---- error
Binder exception: MAP(STRING: STRING) property is not supported in rel table.
-STATEMENT CREATE REL TABLE KIND_OF3(FROM T TO T, myprops SERIAL);
---- error
Binder exception: SERIAL property is not supported in rel table.
Binder exception: SERIAL properties are not supported in rel tables.
-STATEMENT CREATE (:T {name: "Foo"});
---- ok
-STATEMENT CREATE (:T {name: "Bar"});
---- ok
-STATEMENT MATCH (t1:T), (t2:T) where t1.name = 'Foo' AND t2.name = "Bar" CREATE (t1)-[:KIND_OF3 {myprops: map(['1', '2'], ['a', 'b'])}]->(t2);
---- ok

-CASE 2293
-STATEMENT CREATE NODE TABLE T(id INT64, PRIMARY KEY(id));
Expand Down
4 changes: 2 additions & 2 deletions test/test_files/tinysnb/agg/distinct_agg.test
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@

-STATEMENT MATCH (p:person)-[:knows]->(b:person)-[e:knows]->(c:person)-[:knows]->(:person) RETURN DISTINCT e;
---- 12
(0:0)-{_LABEL: knows, _ID: 3:0, date: 2021-06-30, meetTime: 1986-10-21 21:08:31.521, validInterval: 10 years 5 months 13:00:00.000024, comments: [rnme,m8sihsdnf2990nfiwf], summary: {locations: ['toronto','waterloo'], transfer: {day: 2021-01-02, amount: [100,200]}}, notes: 1}->(0:1)
(0:0)-{_LABEL: knows, _ID: 3:1, date: 2021-06-30, meetTime: 1946-08-25 19:07:22, validInterval: 20 years 30 days 48:00:00, comments: [njnojppo9u0jkmf,fjiojioh9h9h89hph], summary: {locations: , transfer: }, notes: 2020-10-10}->(0:2)
(0:0)-{_LABEL: knows, _ID: 3:0, date: 2021-06-30, meetTime: 1986-10-21 21:08:31.521, validInterval: 10 years 5 months 13:00:00.000024, comments: [rnme,m8sihsdnf2990nfiwf], summary: {locations: ['toronto','waterloo'], transfer: {day: 2021-01-02, amount: [100,200]}}, notes: 1, someMap: {a=b}}->(0:1)
(0:0)-{_LABEL: knows, _ID: 3:1, date: 2021-06-30, meetTime: 1946-08-25 19:07:22, validInterval: 20 years 30 days 48:00:00, comments: [njnojppo9u0jkmf,fjiojioh9h9h89hph], summary: {locations: , transfer: }, notes: 2020-10-10, someMap: {c=d, e=f, 1=2}}->(0:2)
(0:0)-{_LABEL: knows, _ID: 3:2, date: 2021-06-30, meetTime: 2012-12-11 20:07:22, validInterval: 10 days, comments: [ioji232,jifhe8w99u43434], summary: {locations: ['shanghai'], transfer: {day: 1990-09-10, amount: [10]}}, notes: nice weather}->(0:3)
(0:1)-{_LABEL: knows, _ID: 3:3, date: 2021-06-30, meetTime: 1946-08-25 19:07:22, validInterval: 10 years 5 months 13:00:00.000024, comments: [2huh9y89fsfw23,23nsihufhw723], summary: {locations: ['paris'], transfer: {day: 2000-01-01, amount: [20,5000]}}, notes: 4}->(0:0)
(0:1)-{_LABEL: knows, _ID: 3:4, date: 1950-05-14, meetTime: 1946-08-25 19:07:22, validInterval: 00:23:00, comments: [fwehu9h9832wewew,23u9h989sdfsss], summary: {locations: ['paris'], transfer: {day: 2011-05-01, amount: [2000,5340]}}, notes: cool stuff found}->(0:2)
Expand Down
Loading

0 comments on commit bd23d12

Please sign in to comment.