Merge "Fix default value with postgreSQL"

This commit is contained in:
Jenkins 2015-12-08 17:53:26 +00:00 committed by Gerrit Code Review
commit 78ae76ad50
2 changed files with 27 additions and 5 deletions

View File

@ -293,6 +293,21 @@ def is_image_visible(context, image, status=None):
return False
def _get_default_column_value(column_type):
"""Return the default value of the columns from DB table
In postgreDB case, if no right default values are being set, an
psycopg2.DataError will be thrown.
"""
type_schema = {
'datetime': None,
'big_integer': 0,
'integer': 0,
'string': ''
}
return type_schema[column_type.__visit_name__]
def _paginate_query(query, model, limit, sort_keys, marker=None,
sort_dir=None, sort_dirs=None):
"""Returns a query with sorting / pagination criteria added.
@ -372,17 +387,16 @@ def _paginate_query(query, model, limit, sort_keys, marker=None,
crit_attrs = []
for j in range(i):
model_attr = getattr(model, sort_keys[j])
default = None if isinstance(
model_attr.property.columns[0].type,
sqlalchemy.DateTime) else ''
default = _get_default_column_value(
model_attr.property.columns[0].type)
attr = sa_sql.expression.case([(model_attr != None,
model_attr), ],
else_=default)
crit_attrs.append((attr == marker_values[j]))
model_attr = getattr(model, sort_keys[i])
default = None if isinstance(model_attr.property.columns[0].type,
sqlalchemy.DateTime) else ''
default = _get_default_column_value(
model_attr.property.columns[0].type)
attr = sa_sql.expression.case([(model_attr != None,
model_attr), ],
else_=default)

View File

@ -546,6 +546,14 @@ class DriverTests(object):
images = self.db_api.image_get_all(self.context, marker=UUID3)
self.assertEqual(2, len(images))
def test_image_get_all_marker_with_size(self):
# Use sort_key=size to test BigInteger
images = self.db_api.image_get_all(self.context, sort_key=['size'],
marker=UUID3)
self.assertEqual(2, len(images))
self.assertEqual(17, images[0]['size'])
self.assertEqual(13, images[1]['size'])
def test_image_get_all_marker_deleted(self):
"""Cannot specify a deleted image as a marker."""
self.db_api.image_destroy(self.adm_context, UUID1)