Skip to content
This repository was archived by the owner on Sep 5, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
f9db383
add nested mutation, upsert, nested types, reverse edge support
jairad26 Dec 23, 2024
5db6423
add nested mutations
jairad26 Dec 24, 2024
ff0c92d
add linking objects, reading from objects
jairad26 Dec 25, 2024
571f0b4
add upsert
jairad26 Dec 25, 2024
bb924d7
pass ci
jairad26 Dec 25, 2024
c2cc8f6
fix tests
jairad26 Dec 25, 2024
786d108
lint
jairad26 Dec 25, 2024
2e9eb3b
.
jairad26 Dec 25, 2024
2ca2dcf
fix test and lint
jairad26 Dec 25, 2024
5acb47c
add requirements on unique constraint
jairad26 Dec 25, 2024
2d6978e
cleanup (#37)
jairad26 Dec 26, 2024
77aaa88
lint
jairad26 Dec 26, 2024
5607b55
add raw mutation
jairad26 Dec 26, 2024
f218a8f
Merge branch 'main' into jai/hyp-2836-support-unstructured-data-inser…
jairad26 Dec 28, 2024
365b6fb
.
jairad26 Dec 28, 2024
40ddfef
add raw get and delete
jairad26 Dec 28, 2024
9553512
Jai/hyp 2840 add vector index support to modusdb (#39)
jairad26 Dec 31, 2024
a7a6995
fix lint
jairad26 Dec 31, 2024
600a1a5
fix test
jairad26 Dec 31, 2024
8b94778
fix test
jairad26 Dec 31, 2024
31f0cb3
.
jairad26 Dec 31, 2024
3293bea
remove raw
jairad26 Jan 2, 2025
7b5fffa
.
jairad26 Jan 2, 2025
f3617ea
.
jairad26 Jan 2, 2025
8606481
add query
jairad26 Jan 2, 2025
5413df6
updated tests
jairad26 Jan 2, 2025
5efa452
add more indexing and filtering
jairad26 Jan 2, 2025
62f246f
add pagination
jairad26 Jan 2, 2025
66c1d63
filters -> filter
jairad26 Jan 2, 2025
120f921
add sorting
jairad26 Jan 2, 2025
b1857c6
lint
jairad26 Jan 2, 2025
c86b77e
.
jairad26 Jan 2, 2025
bcfb2da
.
jairad26 Jan 2, 2025
6346d16
.
jairad26 Jan 2, 2025
60ef068
.
jairad26 Jan 2, 2025
7990063
.
jairad26 Jan 2, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 45 additions & 32 deletions api.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"github.com/dgraph-io/dgraph/v24/schema"
)

func Create[T any](db *DB, object *T, ns ...uint64) (uint64, *T, error) {
func Create[T any](db *DB, object T, ns ...uint64) (uint64, T, error) {
db.mutex.Lock()
defer db.mutex.Unlock()
if len(ns) > 1 {
Expand All @@ -25,7 +25,7 @@ func Create[T any](db *DB, object *T, ns ...uint64) (uint64, *T, error) {

dms := make([]*dql.Mutation, 0)
sch := &schema.ParsedSchema{}
err = generateCreateDqlMutationsAndSchema[T](ctx, n, *object, gid, &dms, sch)
err = generateCreateDqlMutationsAndSchema[T](ctx, n, object, gid, &dms, sch)
if err != nil {
return 0, object, err
}
Expand All @@ -43,88 +43,86 @@ func Create[T any](db *DB, object *T, ns ...uint64) (uint64, *T, error) {
return getByGid[T](ctx, n, gid)
}

func Upsert[T any](db *DB, object *T, ns ...uint64) (uint64, *T, bool, error) {
func Upsert[T any](db *DB, object T, ns ...uint64) (uint64, T, bool, error) {

var wasFound bool
db.mutex.Lock()
defer db.mutex.Unlock()
if len(ns) > 1 {
return 0, object, false, fmt.Errorf("only one namespace is allowed")
}
if object == nil {
return 0, nil, false, fmt.Errorf("object is nil")
}

ctx, n, err := getDefaultNamespace(db, ns...)
if err != nil {
return 0, object, false, err
}

gid, cf, err := getUniqueConstraint[T](*object)
gid, cf, err := getUniqueConstraint[T](object)
if err != nil {
return 0, nil, false, err
return 0, object, false, err
}

dms := make([]*dql.Mutation, 0)
sch := &schema.ParsedSchema{}
err = generateCreateDqlMutationsAndSchema[T](ctx, n, *object, gid, &dms, sch)
err = generateCreateDqlMutationsAndSchema[T](ctx, n, object, gid, &dms, sch)
if err != nil {
return 0, nil, false, err
return 0, object, false, err
}

err = n.alterSchemaWithParsed(ctx, sch)
if err != nil {
return 0, nil, false, err
return 0, object, false, err
}

if gid != 0 {
gid, _, err = getByGidWithObject[T](ctx, n, gid, *object)
gid, _, err = getByGidWithObject[T](ctx, n, gid, object)
if err != nil && err != ErrNoObjFound {
return 0, nil, false, err
return 0, object, false, err
}
wasFound = err == nil
} else if cf != nil {
gid, _, err = getByConstrainedFieldWithObject[T](ctx, n, *cf, *object)
gid, _, err = getByConstrainedFieldWithObject[T](ctx, n, *cf, object)
if err != nil && err != ErrNoObjFound {
return 0, nil, false, err
return 0, object, false, err
}
wasFound = err == nil
}
if gid == 0 {
gid, err = db.z.nextUID()
if err != nil {
return 0, nil, false, err
return 0, object, false, err
}
}

dms = make([]*dql.Mutation, 0)
err = generateCreateDqlMutationsAndSchema[T](ctx, n, *object, gid, &dms, sch)
err = generateCreateDqlMutationsAndSchema[T](ctx, n, object, gid, &dms, sch)
if err != nil {
return 0, nil, false, err
return 0, object, false, err
}

err = applyDqlMutations(ctx, db, dms)
if err != nil {
return 0, nil, false, err
return 0, object, false, err
}

gid, object, err = getByGid[T](ctx, n, gid)
if err != nil {
return 0, nil, false, err
return 0, object, false, err
}

return gid, object, wasFound, nil
}

func Get[T any, R UniqueField](db *DB, uniqueField R, ns ...uint64) (uint64, *T, error) {
func Get[T any, R UniqueField](db *DB, uniqueField R, ns ...uint64) (uint64, T, error) {
db.mutex.Lock()
defer db.mutex.Unlock()
var obj T
if len(ns) > 1 {
return 0, nil, fmt.Errorf("only one namespace is allowed")
return 0, obj, fmt.Errorf("only one namespace is allowed")
}
ctx, n, err := getDefaultNamespace(db, ns...)
if err != nil {
return 0, nil, err
return 0, obj, err
}
if uid, ok := any(uniqueField).(uint64); ok {
return getByGid[T](ctx, n, uid)
Expand All @@ -134,30 +132,45 @@ func Get[T any, R UniqueField](db *DB, uniqueField R, ns ...uint64) (uint64, *T,
return getByConstrainedField[T](ctx, n, cf)
}

return 0, nil, fmt.Errorf("invalid unique field type")
return 0, obj, fmt.Errorf("invalid unique field type")
}

func Query[T any](db *DB, queryParams QueryParams, ns ...uint64) ([]uint64, []T, error) {
db.mutex.Lock()
defer db.mutex.Unlock()
if len(ns) > 1 {
return nil, nil, fmt.Errorf("only one namespace is allowed")
}
ctx, n, err := getDefaultNamespace(db, ns...)
if err != nil {
return nil, nil, err
}

return executeQuery[T](ctx, n, queryParams, false)
}

func Delete[T any, R UniqueField](db *DB, uniqueField R, ns ...uint64) (uint64, *T, error) {
func Delete[T any, R UniqueField](db *DB, uniqueField R, ns ...uint64) (uint64, T, error) {
db.mutex.Lock()
defer db.mutex.Unlock()
var zeroObj T
if len(ns) > 1 {
return 0, nil, fmt.Errorf("only one namespace is allowed")
return 0, zeroObj, fmt.Errorf("only one namespace is allowed")
}
ctx, n, err := getDefaultNamespace(db, ns...)
if err != nil {
return 0, nil, err
return 0, zeroObj, err
}
if uid, ok := any(uniqueField).(uint64); ok {
uid, obj, err := getByGid[T](ctx, n, uid)
if err != nil {
return 0, nil, err
return 0, zeroObj, err
}

dms := generateDeleteDqlMutations(n, uid)

err = applyDqlMutations(ctx, db, dms)
if err != nil {
return 0, nil, err
return 0, zeroObj, err
}

return uid, obj, nil
Expand All @@ -166,18 +179,18 @@ func Delete[T any, R UniqueField](db *DB, uniqueField R, ns ...uint64) (uint64,
if cf, ok := any(uniqueField).(ConstrainedField); ok {
uid, obj, err := getByConstrainedField[T](ctx, n, cf)
if err != nil {
return 0, nil, err
return 0, zeroObj, err
}

dms := generateDeleteDqlMutations(n, uid)

err = applyDqlMutations(ctx, db, dms)
if err != nil {
return 0, nil, err
return 0, zeroObj, err
}

return uid, obj, nil
}

return 0, nil, fmt.Errorf("invalid unique field type")
return 0, zeroObj, fmt.Errorf("invalid unique field type")
}
Loading
Loading