Popularity
1.2
Stable
Activity
0.0
Declining
7
3
0

Programming language: Go
License: MIT License
Tags: Database    

mpath alternatives and similar packages

Based on the "Database" category.
Alternatively, view mpath alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of mpath or a related project?

Add another 'Database' Package

README

mpath-go

Go Report Card CircleCI codecov

Golang realisation of MPTT (or modified preorder tree traversal) in materialized path way.

About

It provides interfaces which yor database object should implement.

Your database object should store:

  • path property as slice of uint64 IDs of materialized path to this object in traversal tree;
  • position property as integer for determine the order of leafs in tree

Usage

Implementation example and tests are in test file.

package main

import (
    "fmt"

    "github.com/spacetab-io/mpath"
)

type TestItems []*TestItem

type TestItem struct {
    ID       uint64
    Path     []uint64
    Position int
    Siblings TestItems
    Name     string
}

// Leaf interface implementation for TestItem
// ...
// Leafs interface implementation for TestItems
// ...

func main() {
    flatItemsSlice := getTestItems()

    var parent = TestItem{}
    if err := mpath.InitTree(&parent, flatItemsSlice); err != nil {
        panic("error tree init")
    }

    fmt.Print(parent)
}

func getTestItems() *TestItems {
    return &TestItems{
        {ID: 1, Position: 0, Name: "item 1", Path: []uint64{1}},
        {ID: 2, Position: 0, Name: "item 2", Path: []uint64{1, 2}},
        {ID: 3, Position: 1, Name: "item 3", Path: []uint64{1, 3}},
        {ID: 4, Position: 0, Name: "item 4", Path: []uint64{1, 2, 4}},
        {ID: 5, Position: 1, Name: "item 5", Path: []uint64{1, 2, 5}},
        {ID: 6, Position: 0, Name: "item 6", Path: []uint64{1, 3, 6}},
    }
}

Tests

go test ./... -v -race