The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6405
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 fbf60fe7adda57adb3b11619e1613eef03b64fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com> Date: Tue, 5 Nov 2019 13:13:12 -0500 Subject: [PATCH 1/2] lxd/db: Cover all combinations of instance filters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber <stgra...@ubuntu.com> --- lxd/db/containers.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lxd/db/containers.go b/lxd/db/containers.go index 489b97fbef..b2b4cf9d3d 100644 --- a/lxd/db/containers.go +++ b/lxd/db/containers.go @@ -24,12 +24,21 @@ import ( //go:generate mapper reset // //go:generate mapper stmt -p db -e instance objects -//go:generate mapper stmt -p db -e instance objects-by-Type +//go:generate mapper stmt -p db -e instance objects-by-Project //go:generate mapper stmt -p db -e instance objects-by-Project-and-Type -//go:generate mapper stmt -p db -e instance objects-by-Node-and-Type -//go:generate mapper stmt -p db -e instance objects-by-Project-and-Node-and-Type +//go:generate mapper stmt -p db -e instance objects-by-Project-and-Type-and-Node +//go:generate mapper stmt -p db -e instance objects-by-Project-and-Type-and-Node-and-Name +//go:generate mapper stmt -p db -e instance objects-by-Project-and-Type-and-Name //go:generate mapper stmt -p db -e instance objects-by-Project-and-Name -//go:generate mapper stmt -p db -e instance objects-by-Project-and-Name-and-Type +//go:generate mapper stmt -p db -e instance objects-by-Project-and-Name-and-Node +//go:generate mapper stmt -p db -e instance objects-by-Project-and-Node +//go:generate mapper stmt -p db -e instance objects-by-Type +//go:generate mapper stmt -p db -e instance objects-by-Type-and-Name +//go:generate mapper stmt -p db -e instance objects-by-Type-and-Name-and-Node +//go:generate mapper stmt -p db -e instance objects-by-Type-and-Node +//go:generate mapper stmt -p db -e instance objects-by-Node +//go:generate mapper stmt -p db -e instance objects-by-Node-and-Name +//go:generate mapper stmt -p db -e instance objects-by-Name //go:generate mapper stmt -p db -e instance profiles-ref //go:generate mapper stmt -p db -e instance profiles-ref-by-Project //go:generate mapper stmt -p db -e instance profiles-ref-by-Node From 93c12f57bbd2f0bc9c0175d22eff8d353304d992 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com> Date: Tue, 5 Nov 2019 13:13:24 -0500 Subject: [PATCH 2/2] lxd/db: Re-generate DB code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber <stgra...@ubuntu.com> --- lxd/db/instances.mapper.go | 177 ++++++++++++++++++++++++++++++------- 1 file changed, 143 insertions(+), 34 deletions(-) diff --git a/lxd/db/instances.mapper.go b/lxd/db/instances.mapper.go index 2d64b0af2a..e379651322 100644 --- a/lxd/db/instances.mapper.go +++ b/lxd/db/instances.mapper.go @@ -19,10 +19,10 @@ SELECT instances.id, projects.name AS project, instances.name, nodes.name AS nod ORDER BY projects.id, instances.name `) -var instanceObjectsByType = cluster.RegisterStmt(` +var instanceObjectsByProject = cluster.RegisterStmt(` SELECT instances.id, projects.name AS project, instances.name, nodes.name AS node, instances.type, instances.architecture, instances.ephemeral, instances.creation_date, instances.stateful, instances.last_use_date, coalesce(instances.description, ''), instances.expiry_date FROM instances JOIN projects ON instances.project_id = projects.id JOIN nodes ON instances.node_id = nodes.id - WHERE instances.type = ? ORDER BY projects.id, instances.name + WHERE project = ? ORDER BY projects.id, instances.name `) var instanceObjectsByProjectAndType = cluster.RegisterStmt(` @@ -31,16 +31,22 @@ SELECT instances.id, projects.name AS project, instances.name, nodes.name AS nod WHERE project = ? AND instances.type = ? ORDER BY projects.id, instances.name `) -var instanceObjectsByNodeAndType = cluster.RegisterStmt(` +var instanceObjectsByProjectAndTypeAndNode = cluster.RegisterStmt(` +SELECT instances.id, projects.name AS project, instances.name, nodes.name AS node, instances.type, instances.architecture, instances.ephemeral, instances.creation_date, instances.stateful, instances.last_use_date, coalesce(instances.description, ''), instances.expiry_date + FROM instances JOIN projects ON instances.project_id = projects.id JOIN nodes ON instances.node_id = nodes.id + WHERE project = ? AND instances.type = ? AND node = ? ORDER BY projects.id, instances.name +`) + +var instanceObjectsByProjectAndTypeAndNodeAndName = cluster.RegisterStmt(` SELECT instances.id, projects.name AS project, instances.name, nodes.name AS node, instances.type, instances.architecture, instances.ephemeral, instances.creation_date, instances.stateful, instances.last_use_date, coalesce(instances.description, ''), instances.expiry_date FROM instances JOIN projects ON instances.project_id = projects.id JOIN nodes ON instances.node_id = nodes.id - WHERE node = ? AND instances.type = ? ORDER BY projects.id, instances.name + WHERE project = ? AND instances.type = ? AND node = ? AND instances.name = ? ORDER BY projects.id, instances.name `) -var instanceObjectsByProjectAndNodeAndType = cluster.RegisterStmt(` +var instanceObjectsByProjectAndTypeAndName = cluster.RegisterStmt(` SELECT instances.id, projects.name AS project, instances.name, nodes.name AS node, instances.type, instances.architecture, instances.ephemeral, instances.creation_date, instances.stateful, instances.last_use_date, coalesce(instances.description, ''), instances.expiry_date FROM instances JOIN projects ON instances.project_id = projects.id JOIN nodes ON instances.node_id = nodes.id - WHERE project = ? AND node = ? AND instances.type = ? ORDER BY projects.id, instances.name + WHERE project = ? AND instances.type = ? AND instances.name = ? ORDER BY projects.id, instances.name `) var instanceObjectsByProjectAndName = cluster.RegisterStmt(` @@ -49,10 +55,58 @@ SELECT instances.id, projects.name AS project, instances.name, nodes.name AS nod WHERE project = ? AND instances.name = ? ORDER BY projects.id, instances.name `) -var instanceObjectsByProjectAndNameAndType = cluster.RegisterStmt(` +var instanceObjectsByProjectAndNameAndNode = cluster.RegisterStmt(` +SELECT instances.id, projects.name AS project, instances.name, nodes.name AS node, instances.type, instances.architecture, instances.ephemeral, instances.creation_date, instances.stateful, instances.last_use_date, coalesce(instances.description, ''), instances.expiry_date + FROM instances JOIN projects ON instances.project_id = projects.id JOIN nodes ON instances.node_id = nodes.id + WHERE project = ? AND instances.name = ? AND node = ? ORDER BY projects.id, instances.name +`) + +var instanceObjectsByProjectAndNode = cluster.RegisterStmt(` +SELECT instances.id, projects.name AS project, instances.name, nodes.name AS node, instances.type, instances.architecture, instances.ephemeral, instances.creation_date, instances.stateful, instances.last_use_date, coalesce(instances.description, ''), instances.expiry_date + FROM instances JOIN projects ON instances.project_id = projects.id JOIN nodes ON instances.node_id = nodes.id + WHERE project = ? AND node = ? ORDER BY projects.id, instances.name +`) + +var instanceObjectsByType = cluster.RegisterStmt(` +SELECT instances.id, projects.name AS project, instances.name, nodes.name AS node, instances.type, instances.architecture, instances.ephemeral, instances.creation_date, instances.stateful, instances.last_use_date, coalesce(instances.description, ''), instances.expiry_date + FROM instances JOIN projects ON instances.project_id = projects.id JOIN nodes ON instances.node_id = nodes.id + WHERE instances.type = ? ORDER BY projects.id, instances.name +`) + +var instanceObjectsByTypeAndName = cluster.RegisterStmt(` +SELECT instances.id, projects.name AS project, instances.name, nodes.name AS node, instances.type, instances.architecture, instances.ephemeral, instances.creation_date, instances.stateful, instances.last_use_date, coalesce(instances.description, ''), instances.expiry_date + FROM instances JOIN projects ON instances.project_id = projects.id JOIN nodes ON instances.node_id = nodes.id + WHERE instances.type = ? AND instances.name = ? ORDER BY projects.id, instances.name +`) + +var instanceObjectsByTypeAndNameAndNode = cluster.RegisterStmt(` +SELECT instances.id, projects.name AS project, instances.name, nodes.name AS node, instances.type, instances.architecture, instances.ephemeral, instances.creation_date, instances.stateful, instances.last_use_date, coalesce(instances.description, ''), instances.expiry_date + FROM instances JOIN projects ON instances.project_id = projects.id JOIN nodes ON instances.node_id = nodes.id + WHERE instances.type = ? AND instances.name = ? AND node = ? ORDER BY projects.id, instances.name +`) + +var instanceObjectsByTypeAndNode = cluster.RegisterStmt(` +SELECT instances.id, projects.name AS project, instances.name, nodes.name AS node, instances.type, instances.architecture, instances.ephemeral, instances.creation_date, instances.stateful, instances.last_use_date, coalesce(instances.description, ''), instances.expiry_date + FROM instances JOIN projects ON instances.project_id = projects.id JOIN nodes ON instances.node_id = nodes.id + WHERE instances.type = ? AND node = ? ORDER BY projects.id, instances.name +`) + +var instanceObjectsByNode = cluster.RegisterStmt(` +SELECT instances.id, projects.name AS project, instances.name, nodes.name AS node, instances.type, instances.architecture, instances.ephemeral, instances.creation_date, instances.stateful, instances.last_use_date, coalesce(instances.description, ''), instances.expiry_date + FROM instances JOIN projects ON instances.project_id = projects.id JOIN nodes ON instances.node_id = nodes.id + WHERE node = ? ORDER BY projects.id, instances.name +`) + +var instanceObjectsByNodeAndName = cluster.RegisterStmt(` SELECT instances.id, projects.name AS project, instances.name, nodes.name AS node, instances.type, instances.architecture, instances.ephemeral, instances.creation_date, instances.stateful, instances.last_use_date, coalesce(instances.description, ''), instances.expiry_date FROM instances JOIN projects ON instances.project_id = projects.id JOIN nodes ON instances.node_id = nodes.id - WHERE project = ? AND instances.name = ? AND instances.type = ? ORDER BY projects.id, instances.name + WHERE node = ? AND instances.name = ? ORDER BY projects.id, instances.name +`) + +var instanceObjectsByName = cluster.RegisterStmt(` +SELECT instances.id, projects.name AS project, instances.name, nodes.name AS node, instances.type, instances.architecture, instances.ephemeral, instances.creation_date, instances.stateful, instances.last_use_date, coalesce(instances.description, ''), instances.expiry_date + FROM instances JOIN projects ON instances.project_id = projects.id JOIN nodes ON instances.node_id = nodes.id + WHERE instances.name = ? ORDER BY projects.id, instances.name `) var instanceProfilesRef = cluster.RegisterStmt(` @@ -171,19 +225,41 @@ 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["Type"] != nil && criteria["Node"] != nil && criteria["Name"] != nil { + stmt = c.stmt(instanceObjectsByProjectAndTypeAndNodeAndName) args = []interface{}{ filter.Project, - filter.Name, filter.Type, + filter.Node, + filter.Name, } - } else if criteria["Project"] != nil && criteria["Node"] != nil && criteria["Type"] != nil { - stmt = c.stmt(instanceObjectsByProjectAndNodeAndType) + } else if criteria["Project"] != nil && criteria["Type"] != nil && criteria["Node"] != nil { + stmt = c.stmt(instanceObjectsByProjectAndTypeAndNode) args = []interface{}{ filter.Project, + filter.Type, filter.Node, + } + } else if criteria["Project"] != nil && criteria["Type"] != nil && criteria["Name"] != nil { + stmt = c.stmt(instanceObjectsByProjectAndTypeAndName) + args = []interface{}{ + filter.Project, + filter.Type, + filter.Name, + } + } else if criteria["Type"] != nil && criteria["Name"] != nil && criteria["Node"] != nil { + stmt = c.stmt(instanceObjectsByTypeAndNameAndNode) + args = []interface{}{ filter.Type, + filter.Name, + filter.Node, + } + } else if criteria["Project"] != nil && criteria["Name"] != nil && criteria["Node"] != nil { + stmt = c.stmt(instanceObjectsByProjectAndNameAndNode) + args = []interface{}{ + filter.Project, + filter.Name, + filter.Node, } } else if criteria["Project"] != nil && criteria["Type"] != nil { stmt = c.stmt(instanceObjectsByProjectAndType) @@ -191,23 +267,56 @@ func (c *ClusterTx) InstanceList(filter InstanceFilter) ([]Instance, error) { filter.Project, filter.Type, } + } else if criteria["Type"] != nil && criteria["Node"] != nil { + stmt = c.stmt(instanceObjectsByTypeAndNode) + args = []interface{}{ + filter.Type, + filter.Node, + } + } else if criteria["Project"] != nil && criteria["Node"] != nil { + stmt = c.stmt(instanceObjectsByProjectAndNode) + args = []interface{}{ + filter.Project, + filter.Node, + } + } else if criteria["Type"] != nil && criteria["Name"] != nil { + stmt = c.stmt(instanceObjectsByTypeAndName) + args = []interface{}{ + filter.Type, + filter.Name, + } } else if criteria["Project"] != nil && criteria["Name"] != nil { stmt = c.stmt(instanceObjectsByProjectAndName) args = []interface{}{ filter.Project, filter.Name, } - } else if criteria["Node"] != nil && criteria["Type"] != nil { - stmt = c.stmt(instanceObjectsByNodeAndType) + } else if criteria["Node"] != nil && criteria["Name"] != nil { + stmt = c.stmt(instanceObjectsByNodeAndName) args = []interface{}{ filter.Node, - filter.Type, + filter.Name, } } else if criteria["Type"] != nil { stmt = c.stmt(instanceObjectsByType) args = []interface{}{ filter.Type, } + } else if criteria["Node"] != nil { + stmt = c.stmt(instanceObjectsByNode) + args = []interface{}{ + filter.Node, + } + } else if criteria["Project"] != nil { + stmt = c.stmt(instanceObjectsByProject) + args = []interface{}{ + filter.Project, + } + } else if criteria["Name"] != nil { + stmt = c.stmt(instanceObjectsByName) + args = []interface{}{ + filter.Name, + } } else { stmt = c.stmt(instanceObjects) args = []interface{}{} @@ -563,28 +672,28 @@ func (c *ClusterTx) InstanceConfigRef(filter InstanceFilter) (map[string]map[str var stmt *sql.Stmt var args []interface{} - if criteria["Project"] != nil && criteria["Name"] != nil { + if criteria["Project"] != nil && criteria["Node"] != nil { + stmt = c.stmt(instanceConfigRefByProjectAndNode) + args = []interface{}{ + filter.Project, + filter.Node, + } + } else if criteria["Project"] != nil && criteria["Name"] != nil { stmt = c.stmt(instanceConfigRefByProjectAndName) args = []interface{}{ filter.Project, filter.Name, } - } else if criteria["Project"] != nil && criteria["Node"] != nil { - stmt = c.stmt(instanceConfigRefByProjectAndNode) + } else if criteria["Project"] != nil { + stmt = c.stmt(instanceConfigRefByProject) args = []interface{}{ filter.Project, - filter.Node, } } else if criteria["Node"] != nil { stmt = c.stmt(instanceConfigRefByNode) args = []interface{}{ filter.Node, } - } else if criteria["Project"] != nil { - stmt = c.stmt(instanceConfigRefByProject) - args = []interface{}{ - filter.Project, - } } else { stmt = c.stmt(instanceConfigRef) args = []interface{}{} @@ -659,28 +768,28 @@ func (c *ClusterTx) InstanceDevicesRef(filter InstanceFilter) (map[string]map[st var stmt *sql.Stmt var args []interface{} - if criteria["Project"] != nil && criteria["Node"] != nil { - stmt = c.stmt(instanceDevicesRefByProjectAndNode) - args = []interface{}{ - filter.Project, - filter.Node, - } - } else if criteria["Project"] != nil && criteria["Name"] != nil { + if criteria["Project"] != nil && criteria["Name"] != nil { stmt = c.stmt(instanceDevicesRefByProjectAndName) args = []interface{}{ filter.Project, filter.Name, } - } else if criteria["Project"] != nil { - stmt = c.stmt(instanceDevicesRefByProject) + } else if criteria["Project"] != nil && criteria["Node"] != nil { + stmt = c.stmt(instanceDevicesRefByProjectAndNode) args = []interface{}{ filter.Project, + filter.Node, } } else if criteria["Node"] != nil { stmt = c.stmt(instanceDevicesRefByNode) args = []interface{}{ filter.Node, } + } else if criteria["Project"] != nil { + stmt = c.stmt(instanceDevicesRefByProject) + args = []interface{}{ + filter.Project, + } } else { stmt = c.stmt(instanceDevicesRef) args = []interface{}{}
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel