def restriction(alias, column, operator, value, map_null_operator=True): if not column: raise Exception('Parameter column may not be None!') if operator in ['~', 'like'] and isinstance(column.type, Integer): try: int(value) # LIKE not allowed on integer columns, change operator to # equals operator = '=' except ValueError: pass if alias: alias = '{0}.'.format(alias) else: alias = '' lhs = column.name if column.table: lhs = '{0}{1}'.format(alias, column.name) if (value and isinstance(column.type, Integer) and type(value) is not list): try: int(value) except ValueError: # column type is integer, but value is not lhs = 'cast({0}{1} as char)'.format(alias, column.name) if operator in ['=', '!='] and (value == 'null' or value is None): if map_null_operator: operator = { '=': 'is', '!=': 'is not' }.get(operator) value = None rhs = format_value(column, value) return ' '.join([lhs, operator, rhs])
def test_format_value(self): """Tests the options.format_value function""" DbTestCase.connection.close() DbTestCase.connection = MockSource().list()[0] DbTestCase.connection.connect() con = DbTestCase.connection user = con.table('user') user2 = con.table('user2') article = con.table('article') now = datetime.now() self.assertEqual(u'null', options.format_value(None, None)) self.assertEqual('1', options.format_value(None, 1)) self.assertEqual("'d'", options.format_value(None, 'd')) self.assertEqual(u'7', options.format_value(user.column('id'), 7)) self.assertEqual(u"'a'", options.format_value(user.column('id'), 'a')) self.assertEqual('null', options.format_value(user.column('id'), None)) self.assertEqual('true', options.format_value(user2.column('deleted'), True)) self.assertEqual('3.141500', options.format_value(user2.column('score'), 3.1415)) self.assertEqual( "'3.14.15'", options.format_value(user2.column('score'), '3.14.15')) self.assertEqual("'{}'".format(str(now)), options.format_value(article.column('created'), now)) self.assertEqual( "('a', 'b')", options.format_value(article.column('id'), ['a', 'b'])) self.assertEqual( u"'[BLOB]'", options.format_value(article.column('id'), buffer('abc')))
def test_format_value(self): """Tests the options.format_value function""" DbTestCase.connection.close() DbTestCase.connection = MockSource().list()[0] DbTestCase.connection.connect() con = DbTestCase.connection user = con.table('user') user2 = con.table('user2') article = con.table('article') now = datetime.now() self.assertEqual( u'null', options.format_value(None, None) ) self.assertEqual( '1', options.format_value(None, 1) ) self.assertEqual( "'d'", options.format_value(None, 'd') ) self.assertEqual( u'7', options.format_value(user.column('id'), 7) ) self.assertEqual( u"'a'", options.format_value(user.column('id'), 'a') ) self.assertEqual( 'null', options.format_value(user.column('id'), None) ) self.assertEqual( 'true', options.format_value(user2.column('deleted'), True) ) self.assertEqual( '3.141500', options.format_value(user2.column('score'), 3.1415) ) self.assertEqual( "'3.14.15'", options.format_value(user2.column('score'), '3.14.15') ) self.assertEqual( "'{}'".format(str(now)), options.format_value(article.column('created'), now) ) self.assertEqual( "('a', 'b')", options.format_value(article.column('id'), ['a', 'b']) ) self.assertEqual( u"'[BLOB]'", options.format_value(article.column('id'), buffer('abc')) )