| 271 | |
| 272 | @BaseSpatialField.register_lookup |
| 273 | class RelateLookup(GISLookup): |
| 274 | lookup_name = "relate" |
| 275 | sql_template = "%(func)s(%(lhs)s, %(rhs)s, %%s)" |
| 276 | pattern_regex = _lazy_re_compile(r"^[012TF*]{9}$") |
| 277 | |
| 278 | def process_rhs(self, compiler, connection): |
| 279 | # Check the pattern argument |
| 280 | pattern = self.rhs_params[0] |
| 281 | backend_op = connection.ops.gis_operators[self.lookup_name] |
| 282 | if hasattr(backend_op, "check_relate_argument"): |
| 283 | backend_op.check_relate_argument(pattern) |
| 284 | elif not isinstance(pattern, str) or not self.pattern_regex.match(pattern): |
| 285 | raise ValueError('Invalid intersection matrix pattern "%s".' % pattern) |
| 286 | sql, params = super().process_rhs(compiler, connection) |
| 287 | return sql, (*params, pattern) |
| 288 | |
| 289 | |
| 290 | @BaseSpatialField.register_lookup |
nothing calls this directly
no test coverage detected