Condition based INNER JOIN for artifact_properties table
In case that "artifact data" does not contain properties other than base artifact properties, query will return no records. That because of INNER JOIN usage between glare_artifacts and glare_artifact_properties tables (as there are no rows in glare_artifact_properties corresponding to that artifact_id). Therefore INNER JOIN needed to be added only if there is any glare_artifact_properties based condition. Change-Id: Icfcbeb41703771145db5405ffc2609dbb6ca1741
This commit is contained in:
parent
1a0c7c01cf
commit
06e46b778f
|
@ -276,8 +276,10 @@ def _apply_user_filters(query, basic_conds, tag_conds, prop_conds):
|
|||
or_queries.append(and_(*prop_condition))
|
||||
|
||||
if len(or_queries) != 0:
|
||||
query = query.join(models.ArtifactProperty, aliased=True).filter(
|
||||
or_(*or_queries))
|
||||
if len(prop_conds['or']) > 0:
|
||||
query = query.join(models.ArtifactProperty, aliased=True)
|
||||
|
||||
query = query.filter(or_(*or_queries))
|
||||
|
||||
return query
|
||||
|
||||
|
|
|
@ -2193,17 +2193,21 @@ class TestUpdate(base.TestArtifact):
|
|||
'value': 'value1'}]
|
||||
url = '/sample_artifact/%s' % art1['id']
|
||||
result = self.patch(url=url, data=data)
|
||||
self.assertEqual(['tag1', 'tag2'], result['tags'])
|
||||
self.assertEqual(['tag1', 'tag2'], sorted(result['tags']))
|
||||
self.assertEqual({'meta1': 'value1'}, result['metadata'])
|
||||
|
||||
# Tags is set data structure so sequence of data is not fixed
|
||||
first_tag = result['tags'][0]
|
||||
second_tag = result['tags'][1]
|
||||
|
||||
# move tag to metadata
|
||||
data = [{"op": "move",
|
||||
"from": "/tags/0",
|
||||
"path": "/metadata/meta2"}]
|
||||
url = '/sample_artifact/%s' % art1['id']
|
||||
result = self.patch(url=url, data=data)
|
||||
self.assertEqual(['tag2'], result['tags'])
|
||||
self.assertEqual({'meta1': 'value1', 'meta2': 'tag1'},
|
||||
self.assertEqual([second_tag], result['tags'])
|
||||
self.assertEqual({'meta1': 'value1', 'meta2': first_tag},
|
||||
result['metadata'])
|
||||
|
||||
# move data from one dict to another one
|
||||
|
@ -2214,7 +2218,7 @@ class TestUpdate(base.TestArtifact):
|
|||
result = self.patch(url=url, data=data)
|
||||
self.assertEqual({}, result['dict_of_str'])
|
||||
self.assertEqual({'meta1': 'value1',
|
||||
'meta2': 'tag1',
|
||||
'meta2': first_tag,
|
||||
'wrong_type': '1'}, result['metadata'])
|
||||
|
||||
# move data from one data to another one having same key
|
||||
|
@ -2229,7 +2233,7 @@ class TestUpdate(base.TestArtifact):
|
|||
result = self.patch(url=url, data=data)
|
||||
self.assertEqual({"new_key": "new_value"}, result['dict_of_str'])
|
||||
self.assertEqual({'meta1': 'value1',
|
||||
'meta2': 'tag1',
|
||||
'meta2': first_tag,
|
||||
'wrong_type': '1',
|
||||
"new_key": "new_value"}, result['metadata'])
|
||||
|
||||
|
@ -2239,7 +2243,7 @@ class TestUpdate(base.TestArtifact):
|
|||
result = self.patch(url=url, data=data)
|
||||
self.assertEqual({}, result['dict_of_str'])
|
||||
self.assertEqual({'meta1': 'value1',
|
||||
'meta2': 'tag1',
|
||||
'meta2': first_tag,
|
||||
'wrong_type': '1',
|
||||
"new_key": "new_value"}, result['metadata'])
|
||||
|
||||
|
|
|
@ -657,3 +657,13 @@ class TestArtifactList(base.BaseTestArtifactAPI):
|
|||
filters = [('name', 'or:tt:ttt'), ('str1', "or:blabla")]
|
||||
self.assertRaises(exc.BadRequest, self.controller.list,
|
||||
self.req, 'sample_artifact', filters)
|
||||
|
||||
res = self.controller.create(self.req, 'heat_templates',
|
||||
{'name': "artifact_without_properties"})
|
||||
|
||||
filters = [('name', 'or:eq:non_existant_name'),
|
||||
('id', 'or:eq:' + res['id'])]
|
||||
res = self.controller.list(self.req, 'heat_templates',
|
||||
filters)['artifacts']
|
||||
self.assertEqual(1, len(res))
|
||||
self.assertEqual('artifact_without_properties', res[0]['name'])
|
||||
|
|
Loading…
Reference in New Issue