def test_simple_compare(self):
		"""Check syntax compare for WHERE statment in UPDATE"""

		testList = [
			(
				{
					'a': { '$gt': 1, '$lt': 2 }
				},
				"a < '2' AND a > '1'"
			),
			(
				{
					'a': { '$gt': 1 },
					'b': { '$gt': 2 },
					'c': { '$ne': 3 }
				},
				"a > '1' AND b > '2' AND c != '3'"
			),
			(
				{
					'a': { '$gt': 1, '$le': 2 },
					'b': { '$eq': 3 },
					'c': { '$ne': 4 },
					'd': { '$ge': 5 },
				},
				"a <= '2' AND a > '1' AND b = '3' AND c != '4' AND d >= '5'"
			),
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_where(m, True)))
	def test_bit(self):
		"""Check $bit syntax for SET statment in UPDATE"""

		testList = [
			(
				{ '$bit': { 'a': { 'and': 2 } } },
				"a=a&2"
			),
			(
				{ '$bit': { 'a': { 'or': 2 } } },
				"a=a|2"
			),
			(
				{ '$bit': { 'a': { 'xor': 2 } } },
				"a=a^2"
			),
			(
				{ '$bit': { 'a': { 'rshift': 2 } } },
				"a=a>>2"
			),
			(
				{ '$bit': { 'a': { 'lshift': 2 } } },
				"a=a<<2"
			),
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_update(m, True)))
	def test_simple_ops(self):
		"""Check simple operation syntax for SET statment in UPDATE"""

		testList = [
			(
				{ '$inc': { 'a': 1, 'b': -2 } },
				"a=a+1 , b=b+-2"
			),
			(
				{ '$dec': { 'a': 1, 'b': -2 } },
				"a=a-1 , b=b--2"
			),
			(
				{ '$set': { 'a': 1, 'b': -2, 'c': 'C' } },
				"a=1 , b=-2 , c='C'"
			),
			(
				{ '$div': { 'a': 1, 'b': -2 } },
				"a=a/1 , b=b/-2"
			),
			(
				{ '$mult': { 'a': 1, 'b': -2 } },
				"a=a*1 , b=b*-2"
			),
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_update(m, True)))
	def test_regex(self):
		"""Check REGEXP syntax for WHERE statment in UPDATE"""

		testList = [
			(
				{
					'a': { '$regex': 'foo.*$' }
				},
				"a REGEXP 'foo.*$'"
			),
			(
				{
					'a': { '$regex': 'foo\$' }
				},
				"a REGEXP 'foo\\\\$'"
			),
			(
				{
					'a': { '$nregex': 'foo.*' }
				},
				"a NOT REGEXP 'foo.*'"
			),
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_where(m, True)))
	def test_in(self):
		"""Check IN syntax for WHERE statment in UPDATE"""

		testList = [
			(
				{
					'a': [1,2,3]
				},
				"a IN ( '1','2','3' )"
			),
			(
				{
					'a': ['a1','a2','a3']
				},
				"a IN ( 'a1','a2','a3' )"
			),
			(
				{
					'a': ['a\'a','b"b','c;c']
				},
				"a IN ( 'a\\'a','b\\\"b','c;c' )"
			),

		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_where(m, True)))
	def test_is(self):
		"""Check IS syntax for WHERE statment in UPDATE"""

		testList = [
			(
				{
					'a': True,
					'b': False,
					'c': None
				},
				"a IS True AND b IS False AND c IS NULL"
			),
			(
				{
					'a': { '$eq': True },
					'b': { '$eq': False },
					'c': { '$eq': None },
				},
				"a IS True AND b IS False AND c IS NULL"
			),
			(
				{
					'a': { '$ne': True },
					'b': { '$ne': False },
					'c': { '$ne': None },
				},
				"a IS NOT True AND b IS NOT False AND c IS NOT NULL"
			)
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_where(m, True)))
	def test_short_form(self):
		"""Check short form syntax for SET statment in UPDATE"""

		testList = [
			(
				{ 'a': 1, 'b': 2, 'c': 3 },
				"a='1' , b='2' , c='3'"
			),
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_update(m, True)))
	def test_concat(self):
		"""Check CONCAT syntax for SET statment in UPDATE"""

		testList = [
			(
				{ '$concat': { 'a': 1, 'b': 'BBB' } },
				"a=CONCAT(a,'1') , b=CONCAT(b,'BBB')"
			),
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_update(m, True)))
	def test_or(self):
		"""Check OR syntax for WHERE statment in UPDATE"""

		testList = [
			(
				{
					'$or': [
						{ 'a': { '$gt': 1 } },
						{ 'a': { '$lt': 2 } },
					]
				},
				"( ( a > '1' ) OR ( a < '2' ) )"
			),
			(
				{
					'a': 1,
					'b': 2,
					'$or': [
						{ 'c': { '$gt': 1 } },
						{ 'c': { '$lt': 2 } },
					]
				},
				"( ( c > '1' ) OR ( c < '2' ) ) AND a = '1' AND b = '2'"
			),
			(
				{
					'$or': [
						{ 'a': { '$gt': 1, '$lt': 2 } },
						{ 'b': { '$eq': 3 } },
					]
				},
				"( ( a < '2' AND a > '1' ) OR ( b = '3' ) )"
			),
			(
				{
					'$or': [
						{ 'a': { '$gt': 1, '$lt': 2 } },
						{ 'b': { '$eq': 3 } },
						{
							'$or': [
								{ 'c': { '$ne': 4 } },
								{ 'd': { '$ge': 5, '$le': 6 } }
							]
						}
					]
				},
				"( ( a < '2' AND a > '1' ) OR ( b = '3' ) OR ( ( ( c != '4' ) OR ( d <= '6' AND d >= '5' ) ) ) )"
			),
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_where(m, True)))
	def test_field(self):
		"""Check $field syntax for SET statment in UPDATE"""

		testList = [
			(
				{ '$inc': { 'table.a': { '$field': 'table.b' } } },
				"table.a=table.a+table.b"
			),
			(
				{ '$set': { 'table.a': { '$field': 'table.b' } } },
				"table.a=table.b"
			),
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_update(m, True)))
Esempio n. 11
0
	def test_short_form(self):
		"""Check syntax statment short form for WHERE statment in UPDATE"""

		testList = [
			(
				{
					'a': 1,
					'b': 2,
					'c': [1,2,3]
				},
				"a = '1' AND b = '2' AND c IN ( '1','2','3' )"
			),
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_where(m, True)))
Esempio n. 12
0
	def test_not(self):
		"""Check NOT syntax for WHERE statment in UPDATE"""

		testList = [
			(
				{
					'$not': {
						'a': { '$gt': 1, '$lt': 2 },
						'b': { '$eq': 3 },
					}
				},
				"NOT ( a < '2' AND a > '1' AND b = '3' )"
			)
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_where(m, True)))
Esempio n. 13
0
	def test_and(self):
		"""Check AND syntax for WHERE statment in UPDATE"""

		testList = [
			(
				{
					'$and': [
						{ 'a': { '$gt': 1, '$lt': 2 } },
						{ 'b': { '$eq': 3 } },
					]
				},
				"( ( a < '2' AND a > '1' ) AND ( b = '3' ) )"
			)
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_where(m, True)))
	def test_subfunc(self):
		"""Check substitution syntax for SET statment in UPDATE"""

		testList = [
			(
				{ '$inc': { 'a': { '$crc32': { '$abs': { '$floor': -1.5 } } } } },
				"a=a+CRC32(ABS(FLOOR(-1.5)))"
			),
			(
				{ '$set': { 'a': { '$crc32': { '$abs': { '$floor': -1.5 } } } } },
				"a=CRC32(ABS(FLOOR(-1.5)))"
			),
			(
				{ '$set': { 'a': { '$crc32': { '$abs': { '$floor': 'XXX' } } } } },
				"a=CRC32(ABS(FLOOR('XXX')))"
			),
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_update(m, True)))
Esempio n. 15
0
	def test_like(self):
		"""Check LIKE syntax for WHERE statment in UPDATE"""

		testList = [
			(
				{
					'a': { '$like': 'foo%' }
				},
				"a LIKE 'foo%'"
			),
			(
				{
					'a': { '$nlike': 'foo%' }
				},
				"a NOT LIKE 'foo%'"
			),
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_where(m, True)))
Esempio n. 16
0
	def test_fields(self):
		"""Check '$field' syntax for WHERE statment in UPDATE"""

		testList = [
			(
				{
					'table.a': { '$eq': { '$field': 'table.b' } },
				},
				"table.a = table.b"
			),
			(
				{
					'table0.a': { '$gt': { '$field': 'table1.a' } },
					'table0.b': { '$lt': { '$field': 'table1.b' } },
				},
				"table0.a > table1.a AND table0.b < table1.b"
			),
		]
		with database.DBConnect() as db:
			for m,s in testList:
				self.assertEqual(s, sqlcmd(db.sql_where(m, True)))