Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: cleanup sqlalchemy compliance test suite code #1017

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 10 additions & 32 deletions sqlalchemy_bigquery/_struct.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,14 @@
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

import packaging.version
import sqlalchemy.sql.default_comparator
import sqlalchemy.sql.sqltypes
import sqlalchemy.types

from . import base

sqlalchemy_1_4_or_more = packaging.version.parse(
sqlalchemy.__version__
) >= packaging.version.parse("1.4")

if sqlalchemy_1_4_or_more:
import sqlalchemy.sql.coercions
import sqlalchemy.sql.roles
import sqlalchemy.sql.coercions
import sqlalchemy.sql.roles


def _get_subtype_col_spec(type_):
Expand Down Expand Up @@ -109,30 +103,14 @@ def __getattr__(self, name):
comparator_factory = Comparator


# In the implementations of _field_index below, we're stealing from
# the JSON type implementation, but the code to steal changed in
# 1.4. :/

if sqlalchemy_1_4_or_more:

def _field_index(self, name, operator):
return sqlalchemy.sql.coercions.expect(
sqlalchemy.sql.roles.BinaryElementRole,
name,
expr=self.expr,
operator=operator,
bindparam_type=sqlalchemy.types.String(),
)

else:

def _field_index(self, name, operator):
return sqlalchemy.sql.default_comparator._check_literal(
self.expr,
operator,
name,
bindparam_type=sqlalchemy.types.String(),
)
def _field_index(self, name, operator):
return sqlalchemy.sql.coercions.expect(
sqlalchemy.sql.roles.BinaryElementRole,
name,
expr=self.expr,
operator=operator,
bindparam_type=sqlalchemy.types.String(),
)


def struct_getitem_op(a, b):
Expand Down
32 changes: 12 additions & 20 deletions sqlalchemy_bigquery/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ def get_insert_default(self, column): # pragma: NO COVER
""",
flags=re.IGNORECASE | re.VERBOSE,
)
def __distribute_types_to_expanded_placeholders(self, m):
def __distribute_types_to_expanded_placeholders(self, m): # pragma: NO COVER
# If we have an in parameter, it sometimes gets expaned to 0 or more
# parameters and we need to move the type marker to each
# parameter.
Expand All @@ -174,6 +174,8 @@ def __distribute_types_to_expanded_placeholders(self, m):
# suffixes refect that when an array parameter is expanded,
# numeric suffixes are added. For example, a placeholder like
# `%(foo)s` gets expaneded to `%(foo_0)s, `%(foo_1)s, ...`.

# Coverage: despite our best efforts, never recognized this segment of code as being tested.
placeholders, type_ = m.groups()
if placeholders:
placeholders = placeholders.replace(")", f":{type_})")
Expand Down Expand Up @@ -356,11 +358,7 @@ def group_by_clause(self, select, **kw):

__sqlalchemy_version_info = packaging.version.parse(sqlalchemy.__version__)

__expanding_text = (
"EXPANDING"
if __sqlalchemy_version_info < packaging.version.parse("1.4")
else "POSTCOMPILE"
)
__expanding_text = "POSTCOMPILE"

# https://github.com/sqlalchemy/sqlalchemy/commit/f79df12bd6d99b8f6f09d4bf07722638c4b4c159
__expanding_conflict = (
Expand Down Expand Up @@ -388,9 +386,6 @@ def visit_in_op_binary(self, binary, operator_, **kw):
self._generate_generic_binary(binary, " IN ", **kw)
)

def visit_empty_set_expr(self, element_types, **kw):
return ""

def visit_not_in_op_binary(self, binary, operator, **kw):
return (
"("
Expand Down Expand Up @@ -424,8 +419,8 @@ def visit_contains_op_binary(self, binary, operator, **kw):
self._maybe_reescape(binary), operator, **kw
)

def visit_notcontains_op_binary(self, binary, operator, **kw):
return super(BigQueryCompiler, self).visit_notcontains_op_binary(
def visit_not_contains_op_binary(self, binary, operator, **kw):
return super(BigQueryCompiler, self).visit_not_contains_op_binary(
self._maybe_reescape(binary), operator, **kw
)

Expand All @@ -434,8 +429,8 @@ def visit_startswith_op_binary(self, binary, operator, **kw):
self._maybe_reescape(binary), operator, **kw
)

def visit_notstartswith_op_binary(self, binary, operator, **kw):
return super(BigQueryCompiler, self).visit_notstartswith_op_binary(
def visit_not_startswith_op_binary(self, binary, operator, **kw):
return super(BigQueryCompiler, self).visit_not_startswith_op_binary(
self._maybe_reescape(binary), operator, **kw
)

Expand All @@ -444,8 +439,8 @@ def visit_endswith_op_binary(self, binary, operator, **kw):
self._maybe_reescape(binary), operator, **kw
)

def visit_notendswith_op_binary(self, binary, operator, **kw):
return super(BigQueryCompiler, self).visit_notendswith_op_binary(
def visit_not_endswith_op_binary(self, binary, operator, **kw):
return super(BigQueryCompiler, self).visit_not_endswith_op_binary(
self._maybe_reescape(binary), operator, **kw
)

Expand Down Expand Up @@ -510,7 +505,8 @@ def visit_bindparam(
# here, because then we can't do a recompile later (e.g., first
# print the statment, then execute it). See issue #357.
#
if getattr(bindparam, "expand_op", None) is not None:
# Coverage: despite our best efforts, never recognized this segment of code as being tested.
if getattr(bindparam, "expand_op", None) is not None: # pragma: NO COVER
assert bindparam.expand_op.__name__.endswith("in_op") # in in
bindparam = bindparam._clone(maintain_key=True)
bindparam.expanding = False
Expand Down Expand Up @@ -1278,10 +1274,6 @@ def do_rollback(self, dbapi_connection):
# BigQuery has no support for transactions.
pass

def _check_unicode_returns(self, connection, additional_tests=None):
# requests gives back Unicode strings
return True

def get_view_definition(self, connection, view_name, schema=None, **kw):
if isinstance(connection, Engine):
connection = connection.connect()
Expand Down
1 change: 0 additions & 1 deletion sqlalchemy_bigquery/requirements.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

import sqlalchemy.testing.requirements
import sqlalchemy.testing.exclusions
from sqlalchemy.testing.exclusions import against, only_on

supported = sqlalchemy.testing.exclusions.open
unsupported = sqlalchemy.testing.exclusions.closed
Expand Down
Loading