The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6238
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) ===
From 375ff2a35a3ca3837e5c223f3d7662e466abc706 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Wed, 25 Sep 2019 14:35:30 +0100 Subject: [PATCH 1/3] shared/generate/db: Adds support for `db:"ignore"` tag on fields - Fields with a `db:"ignore"` tag will not be used in generated queries. Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- shared/generate/db/parse.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/shared/generate/db/parse.go b/shared/generate/db/parse.go index 348c376697..b785c75bcf 100644 --- a/shared/generate/db/parse.go +++ b/shared/generate/db/parse.go @@ -187,7 +187,10 @@ func parseStruct(str *ast.StructType) ([]*Field, error) { return nil, err } - fields = append(fields, field) + // Don't add field if it has been ignored. + if field != nil { + fields = append(fields, field) + } } return fields, nil @@ -200,6 +203,15 @@ func parseField(f *ast.Field) (*Field, error) { //return nil, fmt.Errorf("Unexported field name %q", name.Name) } + // Ignore fields that are marked with a tag of `db:"ingore"` + if f.Tag != nil { + tag := f.Tag.Value + tagValue := reflect.StructTag(tag[1 : len(tag)-1]).Get("db") + if tagValue == "ignore" { + return nil, nil + } + } + typeName := parseType(f.Type) if typeName == "" { return nil, fmt.Errorf("Unsupported type for field %q", name.Name) From d6f15ff83817536ca2a4fce6155400639ca458f3 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Wed, 25 Sep 2019 14:36:19 +0100 Subject: [PATCH 2/3] lxd/db/containers: Adds db:ignore tag to Instance.Snapshot field - Snapshot field is a virtual field and should not be used with queries. Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/db/containers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lxd/db/containers.go b/lxd/db/containers.go index 9bda7f6e3f..8b0c15daca 100644 --- a/lxd/db/containers.go +++ b/lxd/db/containers.go @@ -71,7 +71,7 @@ type Instance struct { Name string `db:"primary=yes"` Node string `db:"join=nodes.name"` Type instance.Type - Snapshot bool + Snapshot bool `db:"ignore"` Architecture int Ephemeral bool CreationDate time.Time From 2b559494f3bf70d389bc918b294d2b3f68d2cc10 Mon Sep 17 00:00:00 2001 From: Thomas Parrott <thomas.parr...@canonical.com> Date: Wed, 25 Sep 2019 14:37:03 +0100 Subject: [PATCH 3/3] lxd/db/instances: Re-ran db generate Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com> --- lxd/db/instances.mapper.go | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/lxd/db/instances.mapper.go b/lxd/db/instances.mapper.go index 74389ef9e7..c2e87af02e 100644 --- a/lxd/db/instances.mapper.go +++ b/lxd/db/instances.mapper.go @@ -5,13 +5,10 @@ package db import ( "database/sql" "fmt" - - "github.com/pkg/errors" - "github.com/lxc/lxd/lxd/db/cluster" "github.com/lxc/lxd/lxd/db/query" - "github.com/lxc/lxd/lxd/instance" "github.com/lxc/lxd/shared/api" + "github.com/pkg/errors" ) var _ = api.ServerEnvironment{} @@ -166,7 +163,7 @@ func (c *ClusterTx) InstanceList(filter InstanceFilter) ([]Instance, error) { if filter.Node != "" { criteria["Node"] = filter.Node } - if filter.Type != instance.TypeAny { + if filter.Type != -1 { criteria["Type"] = filter.Type } @@ -174,18 +171,18 @@ func (c *ClusterTx) InstanceList(filter InstanceFilter) ([]Instance, error) { var stmt *sql.Stmt var args []interface{} - if criteria["Project"] != nil && criteria["Name"] != nil && criteria["Type"] != nil { - stmt = c.stmt(instanceObjectsByProjectAndNameAndType) + if criteria["Project"] != nil && criteria["Node"] != nil && criteria["Type"] != nil { + stmt = c.stmt(instanceObjectsByProjectAndNodeAndType) args = []interface{}{ filter.Project, - filter.Name, + filter.Node, filter.Type, } - } else if criteria["Project"] != nil && criteria["Node"] != nil && criteria["Type"] != nil { - stmt = c.stmt(instanceObjectsByProjectAndNodeAndType) + } else if criteria["Project"] != nil && criteria["Name"] != nil && criteria["Type"] != nil { + stmt = c.stmt(instanceObjectsByProjectAndNameAndType) args = []interface{}{ filter.Project, - filter.Node, + filter.Name, filter.Type, } } else if criteria["Project"] != nil && criteria["Name"] != nil { @@ -194,18 +191,18 @@ func (c *ClusterTx) InstanceList(filter InstanceFilter) ([]Instance, error) { filter.Project, filter.Name, } - } else if criteria["Project"] != nil && criteria["Type"] != nil { - stmt = c.stmt(instanceObjectsByProjectAndType) - args = []interface{}{ - filter.Project, - filter.Type, - } } else if criteria["Node"] != nil && criteria["Type"] != nil { stmt = c.stmt(instanceObjectsByNodeAndType) args = []interface{}{ filter.Node, filter.Type, } + } else if criteria["Project"] != nil && criteria["Type"] != nil { + stmt = c.stmt(instanceObjectsByProjectAndType) + args = []interface{}{ + filter.Project, + filter.Type, + } } else if criteria["Type"] != nil { stmt = c.stmt(instanceObjectsByType) args = []interface{}{
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel