entc/indexes: inverse only restriction applies only on O2O relation

Reviewed By: alexsn

Differential Revision: D17004823

fbshipit-source-id: 08b62960b447a157419dbeefd80ca1fcd29efd76
This commit is contained in:
Ariel Mashraki
2019-08-25 06:39:21 -07:00
committed by Facebook Github Bot
parent 06040fae1e
commit 52292557f6
12 changed files with 119 additions and 102 deletions

View File

@@ -20,37 +20,59 @@ type Index struct {
// index.Fields("name").
// FromEdges("parent").
// Unique(),
//
// }
//
func Fields(fields ...string) *Index {
return &Index{fields: fields}
}
// Fields returns the field names of the given index.
func (i Index) Fields() []string {
return i.fields
// Edges creates an index on the given vertex edge fields.
// Note that indexes are implemented only for SQL dialects, and does not support gremlin.
//
// func (T) Indexes() []ent.Index {
//
// // Unique index of field under 2 edges.
// index.Field("name").
// Edges("parent", "type").
// Unique(),
//
// }
//
func Edges(edges ...string) *Index {
return &Index{edges: edges}
}
// FromEdges sets the fields index to be unique under the set of edges (sub -graph). For example:
// Fields sets the fields of the index.
//
// func (T) Indexes() []ent.Index {
//
// // Unique "name" and "age" fields under the "parent" edge.
// index.Edges("parent").
// Fields("name", "age").
// Unique(),
//
// }
func (i *Index) Fields(fields ...string) *Index {
i.fields = fields
return i
}
// FromEdges sets the fields index to be unique under the set of edges (sub-graph). For example:
//
// func (T) Indexes() []ent.Index {
//
// // Unique "name" field under the "parent" edge.
// index.Fields("name").
// FromEdges("parent").
// Edges("parent").
// Unique(),
// }
//
func (i *Index) FromEdges(edges ...string) *Index {
func (i *Index) Edges(edges ...string) *Index {
i.edges = edges
return i
}
// Edges returns the edge names of the given index.
func (i Index) Edges() []string {
return i.edges
}
// Unique sets the index to be a unique index.
// Note that defining a uniqueness on optional fields won't prevent
// duplicates if one of the column contains NULL values.
@@ -59,7 +81,17 @@ func (i *Index) Unique() *Index {
return i
}
// EdgeNames returns the edge names of the given index.
func (i Index) EdgeNames() []string {
return i.edges
}
// FieldNames returns the field names of the given index.
func (i Index) FieldNames() []string {
return i.fields
}
// IsUnique indicates if this index is a unique index.
func (i *Index) IsUnique() bool {
func (i Index) IsUnique() bool {
return i.unique
}

View File

@@ -10,17 +10,17 @@ import (
func TestIndex(t *testing.T) {
idx := index.Fields("name", "address")
require.Empty(t, idx.Edges())
require.Empty(t, idx.EdgeNames())
require.False(t, idx.IsUnique())
require.Equal(t, []string{"name", "address"}, idx.Fields())
require.Equal(t, []string{"name", "address"}, idx.FieldNames())
idx = index.Fields("name", "address").Unique()
require.Empty(t, idx.Edges())
require.Empty(t, idx.EdgeNames())
require.True(t, idx.IsUnique())
require.Equal(t, []string{"name", "address"}, idx.Fields())
require.Equal(t, []string{"name", "address"}, idx.FieldNames())
idx = index.Fields("name", "address").FromEdges("parent", "type").Unique()
require.Equal(t, []string{"parent", "type"}, idx.Edges())
idx = index.Fields("name", "address").Edges("parent", "type").Unique()
require.Equal(t, []string{"parent", "type"}, idx.EdgeNames())
require.True(t, idx.IsUnique())
require.Equal(t, []string{"name", "address"}, idx.Fields())
require.Equal(t, []string{"name", "address"}, idx.FieldNames())
}