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

Reply via email to