diff --git a/py_dbcn/connectors/core/clauses.py b/py_dbcn/connectors/core/clauses.py index 1ae0c7483fa84bc42303f9901a557bfa3408d14d..8dc7f7bb88c05e73a9143625a911d505b78e7dd8 100644 --- a/py_dbcn/connectors/core/clauses.py +++ b/py_dbcn/connectors/core/clauses.py @@ -315,6 +315,7 @@ class SelectClauseBuilder(BaseClauseBuilder): # Process and save provided clause. self.array = clause + self._print_parens = False def __str__(self): # Handle for all-star return. diff --git a/tests/connectors/core/test_clauses.py b/tests/connectors/core/test_clauses.py index 2b7508217e76c6954aa42f81bb400417560d5bfe..e7c1130bc9236146f81d351e5c6ec0251a4f951f 100644 --- a/tests/connectors/core/test_clauses.py +++ b/tests/connectors/core/test_clauses.py @@ -54,61 +54,61 @@ class CoreClauseTestMixin: # With no quotes. clause_object = self.connector.validate.clauses.SelectClauseBuilder(validation_class, 'id') self.assertEqual(['"id"'], clause_object.array) - self.assertText("""("id")""", str(clause_object)) + self.assertText(""""id\"""", str(clause_object)) # With single quotes. clause_object = self.connector.validate.clauses.SelectClauseBuilder(validation_class, "'id'") self.assertEqual(['"id"'], clause_object.array) - self.assertText("""("id")""", str(clause_object)) + self.assertText(""""id\"""", str(clause_object)) # With double quotes. clause_object = self.connector.validate.clauses.SelectClauseBuilder(validation_class, '"id"') self.assertEqual(['"id"'], clause_object.array) - self.assertText("""("id")""", str(clause_object)) + self.assertText(""""id\"""", str(clause_object)) # With backtick quotes. clause_object = self.connector.validate.clauses.SelectClauseBuilder(validation_class, '`id`') self.assertEqual(['"id"'], clause_object.array) - self.assertText("""("id")""", str(clause_object)) + self.assertText(""""id\"""", str(clause_object)) clause_object = self.connector.validate.clauses.SelectClauseBuilder(validation_class, 'id, code, name') self.assertEqual(['"id"', '"code"', '"name"'], clause_object.array) - self.assertText("""("id", "code", "name")""", str(clause_object)) + self.assertText(""""id", "code", "name\"""", str(clause_object)) with self.subTest('Basic SELECT clause - As list'): clause_object = self.connector.validate.clauses.SelectClauseBuilder(validation_class, ['id']) self.assertEqual(['"id"'], clause_object.array) - self.assertText("""("id")""", str(clause_object)) + self.assertText(""""id\"""", str(clause_object)) clause_object = self.connector.validate.clauses.SelectClauseBuilder( validation_class, ['id', 'code', 'name'], ) self.assertEqual(['"id"', '"code"', '"name"'], clause_object.array) - self.assertText("""("id", "code", "name")""", str(clause_object)) + self.assertText(""""id", "code", "name\"""", str(clause_object)) with self.subTest('Basic SELECT clause - As tuple'): clause_object = self.connector.validate.clauses.SelectClauseBuilder(validation_class, ('id',)) self.assertEqual(['"id"'], clause_object.array) - self.assertText("""("id")""", str(clause_object)) + self.assertText(""""id\"""", str(clause_object)) clause_object = self.connector.validate.clauses.SelectClauseBuilder( validation_class, ('id', 'code', 'name'), ) self.assertEqual(['"id"', '"code"', '"name"'], clause_object.array) - self.assertText("""("id", "code", "name")""", str(clause_object)) + self.assertText(""""id", "code", "name\"""", str(clause_object)) with self.subTest('Values with function calls'): # Uppercase. clause_object = self.connector.validate.clauses.SelectClauseBuilder(validation_class, 'COUNT(*)') self.assertEqual(['COUNT(*)'], clause_object.array) - self.assertText("""(COUNT(*))""", str(clause_object)) + self.assertText("""COUNT(*)""", str(clause_object)) # Lowercase. clause_object = self.connector.validate.clauses.SelectClauseBuilder(validation_class, 'count(*)') self.assertEqual(['COUNT(*)'], clause_object.array) - self.assertText("""(COUNT(*))""", str(clause_object)) + self.assertText("""COUNT(*)""", str(clause_object)) def test__clause__where(self): """Test logic for parsing a WHERE clause.""" diff --git a/tests/connectors/core/test_validate.py b/tests/connectors/core/test_validate.py index 8626c7fbde4ec92bd3622ca076a0a79061e5527f..470a5c2f675d7f27b8af772dbf17b41928baab27 100644 --- a/tests/connectors/core/test_validate.py +++ b/tests/connectors/core/test_validate.py @@ -931,15 +931,15 @@ class CoreValidateTestMixin: with self.subTest('Values as str - Without quotes'): # Single val provided. result = self.connector.validate.sanitize_select_identifier_clause('id') - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # With extra whitespace. result = self.connector.validate.sanitize_select_identifier_clause(' id ') - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # Two vals provided. result = self.connector.validate.sanitize_select_identifier_clause('id, name') self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name') ), @@ -948,7 +948,7 @@ class CoreValidateTestMixin: # With extra whitespace. result = self.connector.validate.sanitize_select_identifier_clause(' id , name ') self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -958,7 +958,7 @@ class CoreValidateTestMixin: # Three vals provided. result = self.connector.validate.sanitize_select_identifier_clause('id, name, code') self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -968,7 +968,7 @@ class CoreValidateTestMixin: # With extra whitespace. result = self.connector.validate.sanitize_select_identifier_clause(' id , name , code ') self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -979,15 +979,15 @@ class CoreValidateTestMixin: with self.subTest('Values as triple str - Without quotes'): # Single val provided. result = self.connector.validate.sanitize_select_identifier_clause("""id""") - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # With extra whitespace. result = self.connector.validate.sanitize_select_identifier_clause(""" id """) - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # Two vals provided. result = self.connector.validate.sanitize_select_identifier_clause("""id, name""") self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -996,7 +996,7 @@ class CoreValidateTestMixin: # With extra whitespace. result = self.connector.validate.sanitize_select_identifier_clause(""" id , name """) self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1006,7 +1006,7 @@ class CoreValidateTestMixin: # Three vals provided. result = self.connector.validate.sanitize_select_identifier_clause("""id, name, code""") self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1016,7 +1016,7 @@ class CoreValidateTestMixin: # With extra whitespace. result = self.connector.validate.sanitize_select_identifier_clause(""" id , name , code """) self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1027,15 +1027,15 @@ class CoreValidateTestMixin: with self.subTest('Values as list - Without quotes'): # Single val provided. result = self.connector.validate.sanitize_select_identifier_clause(['id']) - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # With extra whitespace. result = self.connector.validate.sanitize_select_identifier_clause([' id ']) - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # Two vals provided. result = self.connector.validate.sanitize_select_identifier_clause(['id', 'name']) self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1044,7 +1044,7 @@ class CoreValidateTestMixin: # With extra whitespace. result = self.connector.validate.sanitize_select_identifier_clause([' id ', ' name ']) self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1054,7 +1054,7 @@ class CoreValidateTestMixin: # Three vals provided. result = self.connector.validate.sanitize_select_identifier_clause(['id', 'name', 'code']) self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1064,7 +1064,7 @@ class CoreValidateTestMixin: # With extra whitespace. result = self.connector.validate.sanitize_select_identifier_clause([' id ', ' name ', ' code ']) self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1075,15 +1075,15 @@ class CoreValidateTestMixin: with self.subTest('Values as tuple - Without quotes'): # Single val provided. result = self.connector.validate.sanitize_select_identifier_clause(('id',)) - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # With extra whitespace. result = self.connector.validate.sanitize_select_identifier_clause((' id ',)) - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # Two vals provided. result = self.connector.validate.sanitize_select_identifier_clause(('id', 'name')) self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1092,7 +1092,7 @@ class CoreValidateTestMixin: # With extra whitespace. result = self.connector.validate.sanitize_select_identifier_clause((' id ', ' name ')) self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1102,7 +1102,7 @@ class CoreValidateTestMixin: # Three vals provided. result = self.connector.validate.sanitize_select_identifier_clause(('id', 'name', 'code')) self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1112,7 +1112,7 @@ class CoreValidateTestMixin: # With extra whitespace. result = self.connector.validate.sanitize_select_identifier_clause((' id ', ' name ', ' code ')) self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1123,12 +1123,12 @@ class CoreValidateTestMixin: with self.subTest('Values as str - With single quotes'): # Single val provided. result = self.connector.validate.sanitize_select_identifier_clause("'id'") - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # Two vals provided. result = self.connector.validate.sanitize_select_identifier_clause("'id', 'name'") self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1138,7 +1138,7 @@ class CoreValidateTestMixin: # Three vals provided. result = self.connector.validate.sanitize_select_identifier_clause("'id', 'name', 'code'") self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code') @@ -1149,12 +1149,12 @@ class CoreValidateTestMixin: with self.subTest('Values as list - With single quotes'): # Single val provided. result = self.connector.validate.sanitize_select_identifier_clause(["'id'"]) - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # Two vals provided. result = self.connector.validate.sanitize_select_identifier_clause(["'id'", "'name'"]) self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1164,7 +1164,7 @@ class CoreValidateTestMixin: # Three vals provided. result = self.connector.validate.sanitize_select_identifier_clause(["'id'", "'name'", "'code'"]) self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1175,12 +1175,12 @@ class CoreValidateTestMixin: with self.subTest('Values as tuple - With single quotes'): # Single val provided. result = self.connector.validate.sanitize_select_identifier_clause(("'id'",)) - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # Two vals provided. result = self.connector.validate.sanitize_select_identifier_clause(("'id'", "'name'")) self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1190,7 +1190,7 @@ class CoreValidateTestMixin: # Three vals provided. result = self.connector.validate.sanitize_select_identifier_clause(("'id'", "'name'", "'code'")) self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1201,12 +1201,12 @@ class CoreValidateTestMixin: with self.subTest('Values as str - With double quotes'): # Single val provided. result = self.connector.validate.sanitize_select_identifier_clause('"id"') - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # Two vals provided. result = self.connector.validate.sanitize_select_identifier_clause('"id", "name"') self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1216,7 +1216,7 @@ class CoreValidateTestMixin: # Three vals provided. result = self.connector.validate.sanitize_select_identifier_clause('"id", "name", code') self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1227,12 +1227,12 @@ class CoreValidateTestMixin: with self.subTest('Values as list - With double quotes'): # Single val provided. result = self.connector.validate.sanitize_select_identifier_clause(['"id"']) - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # Two vals provided. result = self.connector.validate.sanitize_select_identifier_clause(['"id"', '"name"']) self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1242,7 +1242,7 @@ class CoreValidateTestMixin: # Three vals provided. result = self.connector.validate.sanitize_select_identifier_clause(['"id"', '"name"', '"code"']) self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1253,12 +1253,12 @@ class CoreValidateTestMixin: with self.subTest('Values as tuple - With double quotes'): # Single val provided. result = self.connector.validate.sanitize_select_identifier_clause(('"id"',)) - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # Two vals provided. result = self.connector.validate.sanitize_select_identifier_clause(('"id"', '"name"')) self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1268,7 +1268,7 @@ class CoreValidateTestMixin: # Three vals provided. result = self.connector.validate.sanitize_select_identifier_clause(('"id"', '"name"', '"code"')) self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1279,12 +1279,12 @@ class CoreValidateTestMixin: with self.subTest('Values as str - With backtick quotes'): # Single val provided. result = self.connector.validate.sanitize_select_identifier_clause('`id`') - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # Two vals provided. result = self.connector.validate.sanitize_select_identifier_clause('`id`, `name`') self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1294,7 +1294,7 @@ class CoreValidateTestMixin: # Three vals provided. result = self.connector.validate.sanitize_select_identifier_clause('`id`, `name`, `code`') self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1305,12 +1305,12 @@ class CoreValidateTestMixin: with self.subTest('Values as list - With backtick quotes'): # Single val provided. result = self.connector.validate.sanitize_select_identifier_clause(['`id`']) - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # Two vals provided. result = self.connector.validate.sanitize_select_identifier_clause(['`id`', '`name`']) self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1320,7 +1320,7 @@ class CoreValidateTestMixin: # Three vals provided. result = self.connector.validate.sanitize_select_identifier_clause(['`id`', '`name`', '`code`']) self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1331,12 +1331,12 @@ class CoreValidateTestMixin: with self.subTest('Values as tuple - With backtick quotes'): # Single val provided. result = self.connector.validate.sanitize_select_identifier_clause(('`id`',)) - self.assertText('({0})'.format(self._quote_select_identifier_format.format('id')), result) + self.assertText('{0}'.format(self._quote_select_identifier_format.format('id')), result) # Two vals provided. result = self.connector.validate.sanitize_select_identifier_clause(('`id`', '`name`')) self.assertText( - '({0}, {1})'.format( + '{0}, {1}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), ), @@ -1346,7 +1346,7 @@ class CoreValidateTestMixin: # Three vals provided. result = self.connector.validate.sanitize_select_identifier_clause(('`id`', '`name`', '`code`')) self.assertText( - '({0}, {1}, {2})'.format( + '{0}, {1}, {2}'.format( self._quote_select_identifier_format.format('id'), self._quote_select_identifier_format.format('name'), self._quote_select_identifier_format.format('code'), @@ -1356,16 +1356,16 @@ class CoreValidateTestMixin: with self.subTest('Values as non-standard types'): result = self.connector.validate.sanitize_select_identifier_clause((1, True)) - self.assertText('({0}, {1})'.format(1, True), result) + self.assertText('{0}, {1}'.format(1, True), result) with self.subTest('Values with function calls'): # Uppercase. result = self.connector.validate.sanitize_select_identifier_clause('COUNT(*)') - self.assertText('(COUNT(*))', result) + self.assertText('COUNT(*)', result) # Lowercase. result = self.connector.validate.sanitize_select_identifier_clause('count(*)') - self.assertText('(COUNT(*))', result) + self.assertText('COUNT(*)', result) def test__sanitize_select_identifier_clause__failure(self): """