[go: up one dir, main page]

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

Updated printing for more physical operators #3886

Closed
wants to merge 28 commits into from

Conversation

MSebanc
Copy link
Collaborator
@MSebanc MSebanc commented Jul 19, 2024

Description

Updated more printings for physical operators.

Delete:

Delete Node:
kuzu> EXPLAIN MATCH (u:User) WHERE u.name = 'Alice' DELETE u RETURN u.*;
┌─────────────────────────────┐
│┌───────────────────────────┐│
││       Physical Plan       ││
│└───────────────────────────┘│
└─────────────────────────────┘
┌─────────────────────────────┐
│      RESULT_COLLECTOR       │
│   -----------------------   │
│     Expressions: u.name     │
│            u.age            │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│         PROJECTION          │
│   -----------------------   │
│     Expressions: u.name     │
│            u.age            │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│           DELETE            │
│   -----------------------   │
│     Type: Delete Nodes      │
│           From: u           │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│           FLATTEN           │
│   -----------------------   │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│     TABLE_FUNCTION_CALL     │
│   -----------------------   │
│    Function: READ_FTABLE    │
│      Expressions: u._ID     │
│            u.age            │
│           u.name            │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│      RESULT_COLLECTOR       │
│   -----------------------   │
│     Expressions: u._ID      │
│            u.age            │
│            u.name           │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│           FILTER            │
│   -----------------------   │
│       EQUALS(u.name)        │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│       SCAN_NODE_TABLE       │
│   -----------------------   │
│         u._ID u.age         │
│           u.name            │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└─────────────────────────────┘

Detach Delete Nodes:
kuzu> EXPLAIN MATCH (u:User) WHERE u.name = 'Adam' DETACH DELETE u;
┌───────────────────────────────┐
│┌─────────────────────────────┐│
││        Physical Plan        ││
│└─────────────────────────────┘│
└───────────────────────────────┘
┌───────────────────────────────┐
│       RESULT_COLLECTOR        │
│   -------------------------   │
│         Expressions:          │
│   -------------------------   │
│      NumOutputTuples: 0       │
│   -------------------------   │
│    ExecutionTime: 0.000000    │
└───────────────┬───────────────┘
┌───────────────┴───────────────┐
│            DELETE             │
│   -------------------------   │
│   Type: Detach Delete Nodes   │
│            From: u            │
│   -------------------------   │
│      NumOutputTuples: 0       │
│   -------------------------   │
│    ExecutionTime: 0.000000    │
└───────────────┬───────────────┘
┌───────────────┴───────────────┐
│            FLATTEN            │
│   -------------------------   │
│   -------------------------   │
│      NumOutputTuples: 0       │
│   -------------------------   │
│    ExecutionTime: 0.000000    │
└───────────────┬───────────────┘
┌───────────────┴───────────────┐
│      TABLE_FUNCTION_CALL      │
│   -------------------------   │
│     Function: READ_FTABLE     │
│       Expressions: u._ID      │
│            u.name             │
│   -------------------------   │
│      NumOutputTuples: 0       │
│   -------------------------   │
│    ExecutionTime: 0.000000    │
└───────────────┬───────────────┘
┌───────────────┴───────────────┐
│       RESULT_COLLECTOR        │
│   -------------------------   │
│      Expressions: u._ID       │
│             u.name            │
│   -------------------------   │
│      NumOutputTuples: 0       │
│   -------------------------   │
│    ExecutionTime: 0.000000    │
└───────────────┬───────────────┘
┌───────────────┴───────────────┐
│            FILTER             │
│   -------------------------   │
│        EQUALS(u.name)         │
│   -------------------------   │
│      NumOutputTuples: 0       │
│   -------------------------   │
│    ExecutionTime: 0.000000    │
└───────────────┬───────────────┘
┌───────────────┴───────────────┐
│        SCAN_NODE_TABLE        │
│   -------------------------   │
│         u._ID u.name          │
│   -------------------------   │
│      NumOutputTuples: 0       │
│   -------------------------   │
│    ExecutionTime: 0.000000    │
└───────────────────────────────┘
Delete Rels:
kuzu> EXPLAIN MATCH (u:User)-[f]->(u1:User) WHERE u.name = 'Karissa' DELETE f;
┌─────────────────────────────┐
│┌───────────────────────────┐│
││       Physical Plan       ││
│└───────────────────────────┘│
└─────────────────────────────┘
┌─────────────────────────────┐
│      RESULT_COLLECTOR       │
│   -----------------------   │
│        Expressions:         │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│           DELETE            │
│   -----------------------   │
│              f              │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│           FLATTEN           │
│   -----------------------   │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│     TABLE_FUNCTION_CALL     │
│   -----------------------   │
│    Function: READ_FTABLE    │
│      Expressions: f._ID     │
│           u1._ID            │
│            u._ID            │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│      RESULT_COLLECTOR       │
│   -----------------------   │
│     Expressions: f._ID      │
│            u1._ID           │
│            u._ID            │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│         PROJECTION          │
│   -----------------------   │
│     Expressions: f._ID      │
│           u1._ID            │
│            u._ID            │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│       SCAN_REL_TABLE        │
│   -----------------------   │
│           u-f->u1           │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│           FLATTEN           │
│   -----------------------   │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│           FILTER            │
│   -----------------------   │
│       EQUALS(u.name)        │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│       SCAN_NODE_TABLE       │
│   -----------------------   │
│        u._ID u.name         │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└─────────────────────────────┘

Partitioner:

kuzu> explain COPY marries FROM "dataset/tinysnb/eMarries.csv";
┌─────────────────────────────┐
│┌───────────────────────────┐│
││       Physical Plan       ││
│└───────────────────────────┘│
└─────────────────────────────┘
┌─────────────────────────────┐                                                                
│      RESULT_COLLECTOR       │                                                                
│   -----------------------   │                                                                
│     Expressions: result     │                                                                
│   -----------------------   │                                                                
│     NumOutputTuples: 0      │                                                                
│   -----------------------   │                                                                
│   ExecutionTime: 0.000000   │                                                                
└──────────────┬──────────────┘                                                                
┌──────────────┴──────────────┐                                                                
│     TABLE_FUNCTION_CALL     │                                                                
│   -----------------------   │                                                                
│    Function: READ_FTABLE    │                                                                
│     Expressions: result     │                                                                
│   -----------------------   │────────────────┬───────────────────────────────┐               
│     NumOutputTuples: 0      │                │                               │               
│   -----------------------   │                │                               │               
│   ExecutionTime: 0.000000   │                │                               │               
└──────────────┬──────────────┘                │                               │               
┌──────────────┴──────────────┐ ┌──────────────┴──────────────┐ ┌──────────────┴──────────────┐
│        BATCH_INSERT         │ │        BATCH_INSERT         │ │         PARTITIONER         │
│   -----------------------   │ │   -----------------------   │ │   -----------------------   │
│           marries           │ │           marries           │ │    Indexes: _src_offset     │
│   -----------------------   │ │   -----------------------   │ │         _dst_offset         │
│     NumOutputTuples: 0      │ │     NumOutputTuples: 0      │ │   -----------------------   │
│   -----------------------   │ │   -----------------------   │ │     NumOutputTuples: 0      │
│   ExecutionTime: 0.000000   │ │   ExecutionTime: 0.000000   │ │   -----------------------   │
│                             │ │                             │ │   ExecutionTime: 0.000000   │
└─────────────────────────────┘ └─────────────────────────────┘ └──────────────┬──────────────┘
                                                                ┌──────────────┴──────────────┐
                                                                │        INDEX_LOOKUP         │
                                                                │   -----------------------   │
                                                                │    Indexes: _src_offset     │
                                                                │         _dst_offset         │
                                                                │   -----------------------   │
                                                                │     NumOutputTuples: 0      │
                                                                │   -----------------------   │
                                                                │   ExecutionTime: 0.000000   │
                                                                └──────────────┬──────────────┘
                                                                ┌──────────────┴──────────────┐
                                                                │     TABLE_FUNCTION_CALL     │
                                                                │   -----------------------   │
                                                                │   -----------------------   │
                                                                │     NumOutputTuples: 0      │
                                                                │   -----------------------   │
                                                                │   ExecutionTime: 0.000000   │
                                                                └─────────────────────────────┘

ScanNodeTable:

kuzu> explain MATCH (a) RETURN a;
┌─────────────────────────────┐
│┌───────────────────────────┐│
││       Physical Plan       ││
│└───────────────────────────┘│
└─────────────────────────────┘
┌─────────────────────────────┐
│      RESULT_COLLECTOR       │
│   -----------------------   │
│       Expressions: a        │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│         PROJECTION          │
│   -----------------------   │
│       Expressions: a        │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│       SCAN_NODE_TABLE       │
│   -----------------------   │
│       Tables: person        │
│         organisation        │
│            movies           │
│     Properties: a.grade     │
│         a.audience          │
│      a.lastJobDuration      │
│       a.registerTime        │
│           a.score           │
│         a.birthdate         │
│           a.state           │
│         a.eyeSight          │
│            a.age            │
│         a.isWorker          │
│            a.ID             │
│             a.u             │
│        a.workedHours        │
│          a.orgCode          │
│         a.usedNames         │
│          a.gender           │
│           a.fName           │
│         a.isStudent         │
│    a.courseScoresPerTerm    │
│          a.grades           │
│        a.description        │
│          a.content          │
│          a.height           │
│           a.info            │
│           a.name            │
│           a.mark            │
│           a.note            │
│          a.rating           │
│          a.history          │
│   a.licenseValidInterval    │
│          a.length           │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└─────────────────────────────┘

ScanRelTable:

kuzu> explain MATCH ()-[r:knows|:meets]-() RETURN r;
┌─────────────────────────────┐
│┌───────────────────────────┐│
││       Physical Plan       ││
│└───────────────────────────┘│
└─────────────────────────────┘
┌─────────────────────────────┐
│      RESULT_COLLECTOR       │
│   -----------------------   │
│       Expressions: r        │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│         PROJECTION          │
│   -----------------------   │
│       Expressions: r        │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│       SCAN_REL_TABLE        │
│   -----------------------   │
│        Tables: knows        │
│            meets            │
│   Direction: ()<-[r]->()    │
│     Properties: r.data      │
│           r.times           │
│           r.notes           │
│          r.summary          │
│         r.location          │
│          r.someMap          │
│         r.comments          │
│       r.validInterval       │
│         r.meetTime          │
│           r.date            │
│            r._ID            │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│           FLATTEN           │
│   -----------------------   │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└──────────────┬──────────────┘
┌──────────────┴──────────────┐
│       SCAN_NODE_TABLE       │
│   -----------------------   │
│       Tables: person        │
│   -----------------------   │
│     NumOutputTuples: 0      │
│   -----------------------   │
│   ExecutionTime: 0.000000   │
└─────────────────────────────┘

SemiMasker:

Only part of the plan
kuzu> explain MATCH (u1:User)-[:Follows]->(u2:User)
..> WHERE u2.name = 'Zhang'
..> RETURN u1.age
..> UNION ALL
..> MATCH (u3:User)-[:Follows]->(u4:User)
..> WHERE u4.name = 'Karissa'
..> RETURN u3.age;
┌────────────────┴────────────────┐ 
│         HASH_JOIN_BUILD         │
│   ---------------------------   │
│             u3._ID              │
│   ---------------------------   │
│       NumOutputTuples: 0        │
│   ---------------------------   │
│     ExecutionTime: 0.000000     │
└────────────────┬────────────────┘ 
┌────────────────┴────────────────┐
│           SEMI_MASKER           │
│   ---------------------------   │
│   Operators: SCAN_NODE_TABLE    │
│   ---------------------------   │
│       NumOutputTuples: 0        │
│   ---------------------------   │
│     ExecutionTime: 0.000000     |
└────────────────┬────────────────┘ 
┌────────────────┴────────────────┐
│           PROJECTION            │
│   ---------------------------   │
│       Expressions: u3._ID       │
│   ---------------------------   │
│       NumOutputTuples: 0        │
│   ---------------------------   │
│     ExecutionTime: 0.000000     │
└────────────────┬────────────────┘
┌────────────────┴────────────────┐
│         SCAN_REL_TABLE          │
│   ---------------------------   │
│         Tables: Follows         │
│    Direction: (u4)<-[]-(u3)     │
│        Properties: ._ID         │
│   ---------------------------   │
│       NumOutputTuples: 0        │
│   ---------------------------   │
│     ExecutionTime: 0.000000     │
└────────────────┬────────────────┘
┌────────────────┴────────────────┐
│   PRIMARY_KEY_SCAN_NODE_TABLE   │
│   ---------------------------   │
│         u4._ID u4.name          │
│   ---------------------------   │
│       NumOutputTuples: 0        │
│   ---------------------------   │
│     ExecutionTime: 0.000000     │
└─────────────────────────────────┘ 

HashJoinBuild and HashJoinProbe:

kuzu> explain MATCH (u:User)-[r]->(u2:User) return u, u2;
┌──────────────────────────────┐
│┌────────────────────────────┐│
││       Physical Plan        ││
│└────────────────────────────┘│
└──────────────────────────────┘
┌──────────────────────────────┐                                 
│       RESULT_COLLECTOR       │                                 
│   ------------------------   │                                 
│        Expressions: u        │                                 
│              u2              │                                 
│   ------------------------   │                                 
│      NumOutputTuples: 0      │                                 
│   ------------------------   │                                 
│   ExecutionTime: 0.000000    │                                 
└──────────────┬───────────────┘                                 
┌──────────────┴───────────────┐                                 
│          PROJECTION          │                                 
│   ------------------------   │                                 
│        Expressions: u        │                                 
│              u2              │                                 
│   ------------------------   │                                 
│      NumOutputTuples: 0      │                                 
│   ------------------------   │                                 
│   ExecutionTime: 0.000000    │                                 
└──────────────┬───────────────┘                                 
┌──────────────┴───────────────┐                                 
│       HASH_JOIN_PROBE        │                                 
│   ------------------------   │                                 
│         Keys: u2._ID         │                                 
│   ------------------------   │────────────────┐                
│      NumOutputTuples: 0      │                │                
│   ------------------------   │                │                
│   ExecutionTime: 0.000000    │                │                
└──────────────┬───────────────┘                │                
┌──────────────┴───────────────┐ ┌──────────────┴───────────────┐
│        SCAN_REL_TABLE        │ │       HASH_JOIN_BUILD        │
│   ------------------------   │ │   ------------------------   │
│       Tables: Follows        │ │         Keys: u2._ID         │
│   Direction: (u)-[r]->(u2)   │ │       Payloads: u2.name      │
│      Properties: r._ID       │ │            u2.age            │
│   ------------------------   │ │   ------------------------   │
│      NumOutputTuples: 0      │ │      NumOutputTuples: 0      │
│   ------------------------   │ │   ------------------------   │
│   ExecutionTime: 0.000000    │ │   ExecutionTime: 0.000000    │
└──────────────┬───────────────┘ └──────────────┬───────────────┘
┌──────────────┴───────────────┐ ┌──────────────┴───────────────┐
│           FLATTEN            │ │       SCAN_NODE_TABLE        │
│   ------------------------   │ │   ------------------------   │
│   ------------------------   │ │         Tables: User         │
│      NumOutputTuples: 0      │ │     Properties: u2.name      │
│   ------------------------   │ │            u2.age            │
│   ExecutionTime: 0.000000    │ │   ------------------------   │
│                              │ │      NumOutputTuples: 0      │
│                              │ │   ------------------------   │
│                              │ │   ExecutionTime: 0.000000    │
└──────────────┬───────────────┘ └──────────────────────────────┘
┌──────────────┴───────────────┐                                 
│       SCAN_NODE_TABLE        │                                 
│   ------------------------   │                                 
│         Tables: User         │                                 
│      Properties: u.age       │                                 
│            u.name            │                                 
│   ------------------------   │                                 
│      NumOutputTuples: 0      │                                 
│   ------------------------   │                                 
│   ExecutionTime: 0.000000    │                                 
└──────────────────────────────┘  

Intersect and Intersect Build:

kuzu> explain MATCH (a:person)-[:knows]->(b:person)-[:knows]->(c:person), (a)-[:knows]->(c) RETURN COUNT(*);
┌───────────────────────────────┐
│┌─────────────────────────────┐│
││        Physical Plan        ││
│└─────────────────────────────┘│
└───────────────────────────────┘
┌───────────────────────────────┐                                                                    
│       RESULT_COLLECTOR        │                                                                    
│   -------------------------   │                                                                    
│   Expressions: COUNT_STAR()   │                                                                    
│   -------------------------   │                                                                    
│      NumOutputTuples: 0       │                                                                    
│   -------------------------   │                                                                    
│    ExecutionTime: 0.000000    │                                                                    
└───────────────┬───────────────┘                                                                    
┌───────────────┴───────────────┐                                                                    
│          PROJECTION           │                                                                    
│   -------------------------   │                                                                    
│   Expressions: COUNT_STAR()   │                                                                    
│   -------------------------   │                                                                    
│      NumOutputTuples: 0       │                                                                    
│   -------------------------   │                                                                    
│    ExecutionTime: 0.000000    │                                                                    
└───────────────┬───────────────┘                                                                    
┌───────────────┴───────────────┐                                                                    
│        AGGREGATE_SCAN         │                                                                    
│   -------------------------   │                                                                    
│    Aggregate: COUNT_STAR()    │                                                                    
│   -------------------------   │                                                                    
│      NumOutputTuples: 0       │                                                                    
│   -------------------------   │                                                                    
│    ExecutionTime: 0.000000    │                                                                    
└───────────────┬───────────────┘                                                                    
┌───────────────┴───────────────┐                                                                    
│           AGGREGATE           │                                                                    
│   -------------------------   │                                                                    
│    Aggregate: COUNT_STAR()    │                                                                    
│   -------------------------   │                                                                    
│      NumOutputTuples: 0       │                                                                    
│   -------------------------   │                                                                    
│    ExecutionTime: 0.000000    │                                                                    
└───────────────┬───────────────┘                                                                    
┌───────────────┴───────────────┐                                                                    
│          PROJECTION           │                                                                    
│   -------------------------   │                                                                    
│         Expressions:          │                                                                    
│   -------------------------   │                                                                    
│      NumOutputTuples: 0       │                                                                    
│   -------------------------   │                                                                    
│    ExecutionTime: 0.000000    │                                                                    
└───────────────┬───────────────┘                                                                    
┌───────────────┴───────────────┐                                                                    
│           INTERSECT           │                                                                    
│   -------------------------   │                                                                    
│          Key: c._ID           │                                                                    
│   -------------------------   │─────────────────┬─────────────────────────────────┐                
│      NumOutputTuples: 0       │                 │                                 │                
│   -------------------------   │                 │                                 │                
│    ExecutionTime: 0.000000    │                 │                                 │                
└───────────────┬───────────────┘                 │                                 │                
┌───────────────┴───────────────┐ ┌───────────────┴───────────────┐ ┌───────────────┴───────────────┐
│            FLATTEN            │ │        INTERSECT_BUILD        │ │        INTERSECT_BUILD        │
│   -------------------------   │ │   -------------------------   │ │   -------------------------   │
│   -------------------------   │ │          Keys: a._ID          │ │          Keys: b._ID          │
│      NumOutputTuples: 0       │ │        Payloads: c._ID        │ │        Payloads: c._ID        │
│   -------------------------   │ │   -------------------------   │ │   -------------------------   │
│    ExecutionTime: 0.000000    │ │      NumOutputTuples: 0       │ │      NumOutputTuples: 0       │
│                               │ │   -------------------------   │ │   -------------------------   │
│                               │ │    ExecutionTime: 0.000000    │ │    ExecutionTime: 0.000000    │
└───────────────┬───────────────┘ └───────────────┬───────────────┘ └───────────────┬───────────────┘
┌───────────────┴───────────────┐ ┌───────────────┴───────────────┐ ┌───────────────┴───────────────┐
│        SCAN_REL_TABLE         │ │          PROJECTION           │ │          PROJECTION           │
│   -------------------------   │ │   -------------------------   │ │   -------------------------   │
│         Tables: knows         │ │      Expressions: a._ID       │ │      Expressions: b._ID       │
│    Direction: (a)-[]->(b)     │ │             c._ID             │ │             c._ID             │
│       Properties: ._ID        │ │   -------------------------   │ │   -------------------------   │
│   -------------------------   │ │      NumOutputTuples: 0       │ │      NumOutputTuples: 0       │
│      NumOutputTuples: 0       │ │   -------------------------   │ │   -------------------------   │
│   -------------------------   │ │    ExecutionTime: 0.000000    │ │    ExecutionTime: 0.000000    │
│    ExecutionTime: 0.000000    │ │                               │ │                               │
└───────────────┬───────────────┘ └───────────────┬───────────────┘ └───────────────┬───────────────┘
┌───────────────┴───────────────┐ ┌───────────────┴───────────────┐ ┌───────────────┴───────────────┐
│            FLATTEN            │ │        SCAN_REL_TABLE         │ │        SCAN_REL_TABLE         │
│   -------------------------   │ │   -------------------------   │ │   -------------------------   │
│   -------------------------   │ │         Tables: knows         │ │         Tables: knows         │
│      NumOutputTuples: 0       │ │    Direction: (a)-[]->(c)     │ │    Direction: (b)-[]->(c)     │
│   -------------------------   │ │       Properties: ._ID        │ │       Properties: ._ID        │
│    ExecutionTime: 0.000000    │ │   -------------------------   │ │   -------------------------   │
│                               │ │      NumOutputTuples: 0       │ │      NumOutputTuples: 0       │
│                               │ │   -------------------------   │ │   -------------------------   │
│                               │ │    ExecutionTime: 0.000000    │ │    ExecutionTime: 0.000000    │
└───────────────┬───────────────┘ └───────────────┬───────────────┘ └───────────────┬───────────────┘
┌───────────────┴───────────────┐ ┌───────────────┴───────────────┐ ┌───────────────┴───────────────┐
│        SCAN_NODE_TABLE        │ │            FLATTEN            │ │            FLATTEN            │
│   -------------------------   │ │   -------------------------   │ │   -------------------------   │
│        Tables: person         │ │   -------------------------   │ │   -------------------------   │
│   -------------------------   │ │      NumOutputTuples: 0       │ │      NumOutputTuples: 0       │
│      NumOutputTuples: 0       │ │   -------------------------   │ │   -------------------------   │
│   -------------------------   │ │    ExecutionTime: 0.000000    │ │    ExecutionTime: 0.000000    │
│    ExecutionTime: 0.000000    │ │                               │ │                               │
└───────────────────────────────┘ └───────────────┬───────────────┘ └───────────────┬───────────────┘
                                  ┌───────────────┴───────────────┐ ┌───────────────┴───────────────┐
                                  │        SCAN_NODE_TABLE        │ │        SCAN_NODE_TABLE        │
                                  │   -------------------------   │ │   -------------------------   │
                                  │        Tables: person         │ │        Tables: person         │
                                  │   -------------------------   │ │   -------------------------   │
                                  │      NumOutputTuples: 0       │ │      NumOutputTuples: 0       │
                                  │   -------------------------   │ │   -------------------------   │
                                  │    ExecutionTime: 0.000000    │ │    ExecutionTime: 0.000000    │
                                  └───────────────────────────────┘ └───────────────────────────────┘
                                  

Create Table:

Node:
kuzu> explain CREATE NODE TABLE User1(name STRING, age INT64, reg_date DATE, PRIMARY KEY (name));
┌──────────────────────────────┐
│┌────────────────────────────┐│
││       Physical Plan        ││
│└────────────────────────────┘│
└──────────────────────────────┘
┌──────────────────────────────┐
│       RESULT_COLLECTOR       │
│   ------------------------   │
│     Expressions: result      │
│   ------------------------   │
│      NumOutputTuples: 0      │
│   ------------------------   │
│   ExecutionTime: 0.000000    │
└──────────────┬───────────────┘
┌──────────────┴───────────────┐
│         CREATE_TABLE         │
│   ------------------------   │
│   Create Node Table: User1   │
│       Properties: name       │
│              age             │
│           reg_date           │
│   ------------------------   │
│      NumOutputTuples: 0      │
│   ------------------------   │
│   ExecutionTime: 0.000000    │
└──────────────────────────────┘
Rel:
kuzu> explain CREATE REL TABLE Likes(FROM User TO User, ONE_MANY);
┌──────────────────────────────────────┐
│┌────────────────────────────────────┐│
││           Physical Plan            ││
│└────────────────────────────────────┘│
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│           RESULT_COLLECTOR           │
│   --------------------------------   │
│         Expressions: result          │
│   --------------------------------   │
│          NumOutputTuples: 0          │
│   --------------------------------   │
│       ExecutionTime: 0.000000        │
└──────────────────┬───────────────────┘
┌──────────────────┴───────────────────┐
│             CREATE_TABLE             │
│   --------------------------------   │
│   Create Relationship Table: Likes   │
│        Multiplicity: ONE_MANY        │
│           Properties: _ID            │
│   --------------------------------   │
│          NumOutputTuples: 0          │
│   --------------------------------   │
│       ExecutionTime: 0.000000        │
└──────────────────────────────────────┘
RelGroup:
kuzu> explain CREATE REL TABLE GROUP Knows1 (FROM User To User, FROM User to City, year INT64);
┌─────────────────────────────────────────────┐
│┌───────────────────────────────────────────┐│
││               Physical Plan               ││
│└───────────────────────────────────────────┘│
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│              RESULT_COLLECTOR               │
│   ---------------------------------------   │
│             Expressions: result             │
│   ---------------------------------------   │
│             NumOutputTuples: 0              │
│   ---------------------------------------   │
│           ExecutionTime: 0.000000           │
└──────────────────────┬──────────────────────┘
┌──────────────────────┴──────────────────────┐
│                CREATE_TABLE                 │
│   ---------------------------------------   │
│   Create Relationship Group Table: Knows1   │
│          Tables: Knows1_User_User           │
│               Knows1_User_City              │
│               Properties: _ID               │
│                     year                    │
│   ---------------------------------------   │
│             NumOutputTuples: 0              │
│   ---------------------------------------   │
│           ExecutionTime: 0.000000           │
└─────────────────────────────────────────────┘

# Contributor agreement

- [x] I have read and agree to the [Contributor Agreement](https://github.com/kuzudb/kuzu/blob/master/CLA.md).

@MSebanc MSebanc requested a review from andyfengHKU July 19, 2024 21:41
Copy link

Benchmark Result

Master commit hash: d4229626d5fd91f9375afc8d0f6642786311bffe
Branch commit hash: ff7c41ff91d96013282bc27aa94743875bd630b8

Query Group Query Name Mean Time - Commit (ms) Mean Time - Master (ms) Diff
aggregation q24 648.86 649.31 -0.45 (-0.07%)
aggregation q28 10886.78 10946.49 -59.71 (-0.55%)
filter q14 128.07 126.21 1.87 (1.48%)
filter q15 129.06 127.55 1.51 (1.18%)
filter q16 302.41 296.91 5.50 (1.85%)
filter q17 449.58 450.70 -1.12 (-0.25%)
filter q18 1918.51 1933.76 -15.24 (-0.79%)
fixed_size_expr_evaluator q07 564.19 568.41 -4.22 (-0.74%)
fixed_size_expr_evaluator q08 787.37 792.80 -5.43 (-0.68%)
fixed_size_expr_evaluator q09 785.14 792.18 -7.04 (-0.89%)
fixed_size_expr_evaluator q10 241.11 247.07 -5.97 (-2.42%)
fixed_size_expr_evaluator q11 238.31 238.65 -0.34 (-0.14%)
fixed_size_expr_evaluator q12 235.48 238.84 -3.36 (-1.41%)
fixed_size_expr_evaluator q13 1477.43 1468.23 9.19 (0.63%)
fixed_size_seq_scan q23 118.41 118.19 0.21 (0.18%)
join q31 7.18 8.21 -1.03 (-12.52%)
ldbc_snb_ic q35 792.81 1060.31 -267.50 (-25.23%)
ldbc_snb_ic q36 38.05 31.27 6.79 (21.71%)
ldbc_snb_is q32 6.22 5.69 0.53 (9.40%)
ldbc_snb_is q33 14.63 14.40 0.24 (1.66%)
ldbc_snb_is q34 1.82 1.02 0.80 (78.30%)
multi-rel multi-rel-large-scan 2703.82 2669.50 34.31 (1.29%)
multi-rel multi-rel-lookup 22.10 43.54 -21.44 (-49.25%)
multi-rel multi-rel-small-scan 95.61 92.65 2.96 (3.19%)
order_by q25 131.78 128.40 3.37 (2.63%)
order_by q26 445.92 442.93 3.00 (0.68%)
order_by q27 1383.37 1388.26 -4.88 (-0.35%)
scan_after_filter q01 173.17 177.72 -4.55 (-2.56%)
scan_after_filter q02 157.56 160.47 -2.91 (-1.81%)
shortest_path_ldbc100 q39 45.56 47.85 -2.30 (-4.80%)
var_size_expr_evaluator q03 2023.55 2033.82 -10.27 (-0.50%)
var_size_expr_evaluator q04 2226.35 2244.25 -17.91 (-0.80%)
var_size_expr_evaluator q05 2581.22 2573.22 8.00 (0.31%)
var_size_expr_evaluator q06 1341.82 1360.27 -18.45 (-1.36%)
var_size_seq_scan q19 1440.89 1449.41 -8.52 (-0.59%)
var_size_seq_scan q20 2805.76 2806.50 -0.74 (-0.03%)
var_size_seq_scan q21 2384.95 2363.55 21.39 (0.91%)
var_size_seq_scan q22 126.45 126.57 -0.12 (-0.09%)

Copy link

Benchmark Result

Master commit hash: d4229626d5fd91f9375afc8d0f6642786311bffe
Branch commit hash: 7b45669f7354e4281bed9bf09e411291e028c595

Query Group Query Name Mean Time - Commit (ms) Mean Time - Master (ms) Diff
aggregation q24 646.19 649.31 -3.13 (-0.48%)
aggregation q28 11332.19 10946.49 385.70 (3.52%)
filter q14 127.17 126.21 0.96 (0.76%)
filter q15 121.89 127.55 -5.66 (-4.43%)
filter q16 304.16 296.91 7.26 (2.44%)
filter q17 450.97 450.70 0.27 (0.06%)
filter q18 1885.87 1933.76 -47.89 (-2.48%)
fixed_size_expr_evaluator q07 563.65 568.41 -4.76 (-0.84%)
fixed_size_expr_evaluator q08 792.77 792.80 -0.03 (-0.00%)
fixed_size_expr_evaluator q09 785.52 792.18 -6.66 (-0.84%)
fixed_size_expr_evaluator q10 241.53 247.07 -5.54 (-2.24%)
fixed_size_expr_evaluator q11 235.24 238.65 -3.41 (-1.43%)
fixed_size_expr_evaluator q12 235.11 238.84 -3.74 (-1.57%)
fixed_size_expr_evaluator q13 1471.18 1468.23 2.94 (0.20%)
fixed_size_seq_scan q23 113.98 118.19 -4.21 (-3.56%)
join q31 5.38 8.21 -2.83 (-34.47%)
ldbc_snb_ic q35 795.70 1060.31 -264.60 (-24.96%)
ldbc_snb_ic q36 39.89 31.27 8.62 (27.57%)
ldbc_snb_is q32 5.29 5.69 -0.40 (-6.96%)
ldbc_snb_is q33 11.85 14.40 -2.54 (-17.65%)
ldbc_snb_is q34 1.27 1.02 0.25 (24.67%)
multi-rel multi-rel-large-scan 2697.66 2669.50 28.16 (1.05%)
multi-rel multi-rel-lookup 25.82 43.54 -17.72 (-40.70%)
multi-rel multi-rel-small-scan 86.81 92.65 -5.84 (-6.31%)
order_by q25 124.35 128.40 -4.05 (-3.15%)
order_by q26 446.57 442.93 3.64 (0.82%)
order_by q27 1376.84 1388.26 -11.41 (-0.82%)
scan_after_filter q01 173.32 177.72 -4.40 (-2.47%)
scan_after_filter q02 158.37 160.47 -2.09 (-1.30%)
shortest_path_ldbc100 q39 46.80 47.85 -1.05 (-2.19%)
var_size_expr_evaluator q03 2034.70 2033.82 0.89 (0.04%)
var_size_expr_evaluator q04 2188.38 2244.25 -55.88 (-2.49%)
var_size_expr_evaluator q05 2601.82 2573.22 28.60 (1.11%)
var_size_expr_evaluator q06 1341.58 1360.27 -18.69 (-1.37%)
var_size_seq_scan q19 1456.81 1449.41 7.39 (0.51%)
var_size_seq_scan q20 2869.97 2806.50 63.47 (2.26%)
var_size_seq_scan q21 2350.93 2363.55 -12.62 (-0.53%)
var_size_seq_scan q22 126.18 126.57 -0.39 (-0.31%)

Copy link
Contributor
@andyfengHKU andyfengHKU left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

src/processor/operator/scan/scan_rel_table.cpp Outdated Show resolved Hide resolved
src/processor/operator/ddl/create_table.cpp Outdated Show resolved Hide resolved
andyfengHKU and others added 4 commits July 20, 2024 00:22
* Solve copy casting

* Run clang-format

---------

Co-authored-by: CI Bot <andyfengHKU@users.noreply.github.com>
Copy link

Benchmark Result

Master commit hash: 0e3850bfa2963b0fad31e051b2376413fb79024d
Branch commit hash: 31e093a630b15cb170f02daf537bb1c03fe559f8

Query Group Query Name Mean Time - Commit (ms) Mean Time - Master (ms) Diff
aggregation q24 659.28 655.90 3.38 (0.52%)
aggregation q28 14593.80 11906.90 2686.90 (22.57%)
filter q14 128.13 136.89 -8.76 (-6.40%)
filter q15 126.44 132.95 -6.50 (-4.89%)
filter q16 313.55 309.19 4.35 (1.41%)
filter q17 452.89 464.88 -11.99 (-2.58%)
filter q18 1897.77 1905.99 -8.22 (-0.43%)
fixed_size_expr_evaluator q07 562.66 573.32 -10.66 (-1.86%)
fixed_size_expr_evaluator q08 787.72 796.73 -9.02 (-1.13%)
fixed_size_expr_evaluator q09 786.13 793.37 -7.24 (-0.91%)
fixed_size_expr_evaluator q10 240.09 249.05 -8.96 (-3.60%)
fixed_size_expr_evaluator q11 234.35 248.80 -14.45 (-5.81%)
fixed_size_expr_evaluator q12 234.20 243.53 -9.33 (-3.83%)
fixed_size_expr_evaluator q13 1482.23 1477.50 4.73 (0.32%)
fixed_size_seq_scan q23 118.22 123.76 -5.55 (-4.48%)
join q31 8.20 7.02 1.19 (16.90%)
ldbc_snb_ic q35 811.27 779.74 31.52 (4.04%)
ldbc_snb_ic q36 32.70 29.79 2.91 (9.78%)
ldbc_snb_is q32 6.32 6.29 0.03 (0.53%)
ldbc_snb_is q33 12.87 13.93 -1.06 (-7.61%)
ldbc_snb_is q34 1.76 1.76 0.00 (0.23%)
multi-rel multi-rel-large-scan 2790.66 2674.98 115.68 (4.32%)
multi-rel multi-rel-lookup 49.50 44.53 4.97 (11.16%)
multi-rel multi-rel-small-scan 84.35 92.25 -7.90 (-8.57%)
order_by q25 133.38 133.39 -0.02 (-0.01%)
order_by q26 449.30 451.69 -2.39 (-0.53%)
order_by q27 1402.68 1404.11 -1.42 (-0.10%)
scan_after_filter q01 177.46 183.16 -5.70 (-3.11%)
scan_after_filter q02 159.36 165.90 -6.54 (-3.94%)
shortest_path_ldbc100 q39 68.20 68.80 -0.60 (-0.88%)
var_size_expr_evaluator q03 2028.31 2069.43 -41.12 (-1.99%)
var_size_expr_evaluator q04 2254.71 2216.09 38.63 (1.74%)
var_size_expr_evaluator q05 2586.97 2635.30 -48.34 (-1.83%)
var_size_expr_evaluator q06 1357.39 1381.56 -24.18 (-1.75%)
var_size_seq_scan q19 1472.44 1468.77 3.67 (0.25%)
var_size_seq_scan q20 3129.04 3079.58 49.45 (1.61%)
var_size_seq_scan q21 2439.88 2394.73 45.15 (1.89%)
var_size_seq_scan q22 129.11 132.08 -2.97 (-2.25%)

mxwli and others added 16 commits July 22, 2024 14:33
* in mem mvcc
* MVCC Changes Port ADD COLUMN (#3745)
* initial port to new infra
* add flush
* finish rel non-transaction
* finish local storage for node table
* fix rel table transactions
* add tests for node table add prop
* address cleanup comments
* fixes and clang-format
* Mvcc Storage Info (#3782)
* rebase and squash
* update tests
* comment out rdf tests bunch of fixes
* Mvcc data chunk scan (#3795)
* Mvcc Detach Delete (#3809)
* initial impl
* detach delete rework
* local table tests and tiny bug fix
* Mvcc Concurrent Testing (#3830)
* add concurrent testing
* address comments
* remove unnecessary logic
* address style comments
* MVCC checkpoint (#3842)
* in mem mvcc
* fixes
* bunch of fixes
* fix includes and clean useless file
* fix create rel with local nodes (#3772)
* remove commitSkipCheckoint; rollbackSkipCheckpoint from syntax
rework checkpoint
* fix compilation
* checkpoint
* rework shadow file; remove DUMMY_READ_TRANSACTION and DUMMY_WRITE_TRANSACTION, replace with DUMMY_TRANSACTION; add CHECKPOINT transaction type
* rework transaction passing in hash index
* fix serialization; add debugging info framework into ser/deSer
* fix replay shadow page: missed updateFrameIfPageIsInFrameWithoutLock
* fix ser/deSer debugging info
* fix OffsetScanNodeTable init state
* fix lookup
* fix overflow file read
* fix rel insertion after checkpoint; fix deletion version check
* fix incorrect scan of checkpointed rows due to deletion
* clean up wal page related logic
* clean up
* test clean
* merge cypher grammar changes; found bug in load from in demo db test; more clean
* fix semi mask
* comment out gds
* Run clang-format
* Fix gcc-14 compilation errors (#3849)
* Fix deadlock + uninitialized scan state (#3853)
* Mvcc catalog locking (#3850)
* initial impl with deadlock
* Run clang-format
* unskip test
* update extension version
* add mutex header
* comment out attachdb test
* add single write tests
* add storage manager locks
* add more tests
* address comments
* fix compile
* Mvcc fix multi transaction (#3875)
* patch: mem leak in VectorVersionRecord
* Move access to primary key index into node table (#3864)
Also removed dummy transactions in the hash index lookup and builder
* fix transaction in LocalNodeTable::update
* fix transaction rollback during transaction context destruction
* patch: fix transaction pointer passed into local tables
* clean test
* unskip a few more tests
* minor fix
* draft: compilation issue
* add basic version of recovery for insert/delete/update of node tables
* basic rel table create/update/delete
* separate wal logging and undo buffer
* patch sam's fix
* fix replay of add/alter/drop table with changes to storage manager
* Implement serialize valuevector
* add tests for nested type
* Mvcc catalog locking (#3850)
* initial impl with deadlock
* Run clang-format
* unskip test
* update extension version
* add mutex header
* comment out attachdb test
* add single write test
* add storage manager locks
* add more tests
* address comments
* fix compile
* add recovery for detach delete
* fix compilation
* add version for batch insert
* test nested type; multiple insertions
* fix wal logging; cannot log insert during commit, can possibly lead to incorrect sequence of records
* patch: fix rdf
* fix recovery after multiple reloaddb; unskip more recovery tests
* unskip tests due to debugging
* fix compilation
* fix multiple reloaddb after rollback
* Run clang-format
* try fix clang tidy
* lock undo buffer mem allocation
* fix msvc compilation; comment out failed c api tests for now
* temp skip binary demo tests on 32-bit platform
* skip extension test for now: hit extension deploy problems
* skip pyg remote backend test
* lock over sanity check of numPages in bm file handle
* fix deserializing of vectors: should resize instead of reserve and pushBack, which implicitly assumes the input vector is empty
* enable force checkpoint after copy
* fix transaction manager to handle recovery transactions
* skip rdf variant tests in pytes
* Disable daily build workflow (#3896)
* skip gds in json extension test
* skip hang java api database test
* skip for now test on large serial copy
* fix offset concurrency issue
* fix version check of hash index
* CLI case-insensitive and snake_case shell flags

* Run clang-format

* Fixed tests

---------

Co-authored-by: CI Bot <MSebanc@users.noreply.github.com>
* fix storage driver

* Run clang-format

---------

Co-authored-by: CI Bot <andyfengHKU@users.noreply.github.com>
* Updated shell help docs url to a clickable link

* Updated tests
* Rework update

* Run clang-format

---------

Co-authored-by: CI Bot <andyfengHKU@users.noreply.github.com>
Copy link

Benchmark Result

Master commit hash: dcdd534d6f0e2445d7f828d6bf5987bf8f08a556
Branch commit hash: f02fd5157738daed7cfd70c80e8ba26e2ce9c1a5

Query Group Query Name Mean Time - Commit (ms) Mean Time - Master (ms) Diff
aggregation q24 666.89 680.02 -13.13 (-1.93%)
aggregation q28 12055.95 11691.97 363.98 (3.11%)
filter q14 146.37 156.99 -10.62 (-6.76%)
filter q15 148.71 159.18 -10.47 (-6.58%)
filter q16 320.79 328.10 -7.31 (-2.23%)
filter q17 466.56 479.83 -13.27 (-2.77%)
filter q18 1944.19 1918.47 25.72 (1.34%)
fixed_size_expr_evaluator q07 582.34 596.51 -14.17 (-2.38%)
fixed_size_expr_evaluator q08 805.72 820.05 -14.33 (-1.75%)
fixed_size_expr_evaluator q09 801.44 820.40 -18.96 (-2.31%)
fixed_size_expr_evaluator q10 256.76 273.82 -17.06 (-6.23%)
fixed_size_expr_evaluator q11 252.35 268.82 -16.47 (-6.13%)
fixed_size_expr_evaluator q12 251.71 266.18 -14.47 (-5.44%)
fixed_size_expr_evaluator q13 1479.61 1500.76 -21.16 (-1.41%)
fixed_size_seq_scan q23 141.39 154.27 -12.88 (-8.35%)
join q31 46.39 40.41 5.98 (14.80%)
ldbc_snb_ic q35 3721.63 3761.28 -39.65 (-1.05%)
ldbc_snb_ic q36 129.22 127.66 1.57 (1.23%)
ldbc_snb_is q32 10.22 10.76 -0.55 (-5.09%)
ldbc_snb_is q33 98.36 97.14 1.22 (1.25%)
ldbc_snb_is q34 98.55 89.79 8.77 (9.77%)
multi-rel multi-rel-large-scan 3518.97 3716.18 -197.21 (-5.31%)
multi-rel multi-rel-lookup 40.47 52.23 -11.76 (-22.52%)
multi-rel multi-rel-small-scan 78.07 64.58 13.49 (20.88%)
order_by q25 147.50 166.42 -18.92 (-11.37%)
order_by q26 463.80 471.26 -7.45 (-1.58%)
order_by q27 1417.35 1439.16 -21.81 (-1.52%)
scan_after_filter q01 198.97 206.10 -7.13 (-3.46%)
scan_after_filter q02 190.80 193.10 -2.31 (-1.19%)
shortest_path_ldbc100 q39 145.64 150.78 -5.13 (-3.41%)
var_size_expr_evaluator q03 2066.05 2078.40 -12.35 (-0.59%)
var_size_expr_evaluator q04 2251.72 2227.19 24.53 (1.10%)
var_size_expr_evaluator q05 2632.51 2630.10 2.40 (0.09%)
var_size_expr_evaluator q06 1426.34 1407.52 18.82 (1.34%)
var_size_seq_scan q19 1480.58 1489.54 -8.96 (-0.60%)
var_size_seq_scan q20 3178.65 3160.26 18.40 (0.58%)
var_size_seq_scan q21 2449.93 2428.85 21.08 (0.87%)
var_size_seq_scan q22 132.62 136.22 -3.60 (-2.64%)

@MSebanc MSebanc closed this Jul 24, 2024
@MSebanc MSebanc deleted the yet-more-operator-printing branch July 24, 2024 06:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants