mirror of
https://github.com/ent/ent.git
synced 2026-04-28 05:30:56 +03:00
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:
committed by
Facebook Github Bot
parent
06040fae1e
commit
52292557f6
@@ -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
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user