|
11 | 11 | from django.db.models.fields import BinaryField, Field |
12 | 12 | from django.db.models.functions import Cast, NthValue, MD5, SHA1, SHA224, SHA256, SHA384, SHA512 |
13 | 13 | from django.db.models.functions.math import ATan2, Ln, Log, Mod, Round, Degrees, Radians, Power |
| 14 | +from django.db.models.functions.text import Replace |
14 | 15 | from django.db.models.lookups import In, Lookup |
15 | 16 | from django.db.models.query import QuerySet |
16 | 17 | from django.db.models.sql.query import Query |
@@ -44,6 +45,19 @@ def sqlserver_log(self, compiler, connection, **extra_context): |
44 | 45 | def sqlserver_ln(self, compiler, connection, **extra_context): |
45 | 46 | return self.as_sql(compiler, connection, function='LOG', **extra_context) |
46 | 47 |
|
| 48 | + |
| 49 | +def sqlserver_replace(self, compiler, connection, **extra_context): |
| 50 | + current_db = "CONVERT(varchar, (SELECT DB_NAME()))" |
| 51 | + with connection.cursor() as cursor: |
| 52 | + cursor.execute("SELECT CONVERT(varchar, DATABASEPROPERTYEX(%s, 'collation'))" % current_db) |
| 53 | + default_collation = cursor.fetchone()[0] |
| 54 | + current_collation = default_collation.replace('_CI', '_CS') |
| 55 | + return self.as_sql( |
| 56 | + compiler, connection, function='REPLACE', |
| 57 | + template = 'REPLACE(%s COLLATE %s)' % ('%(expressions)s', current_collation), |
| 58 | + **extra_context |
| 59 | + ) |
| 60 | + |
47 | 61 | def sqlserver_degrees(self, compiler, connection, **extra_context): |
48 | 62 | return self.as_sql( |
49 | 63 | compiler, connection, function='DEGREES', |
@@ -441,6 +455,7 @@ def sqlserver_sha512(self, compiler, connection, **extra_context): |
441 | 455 | NthValue.as_microsoft = sqlserver_nth_value |
442 | 456 | Round.as_microsoft = sqlserver_round |
443 | 457 | Window.as_microsoft = sqlserver_window |
| 458 | +Replace.as_microsoft = sqlserver_replace |
444 | 459 | MD5.as_microsoft = sqlserver_md5 |
445 | 460 | SHA1.as_microsoft = sqlserver_sha1 |
446 | 461 | SHA224.as_microsoft = sqlserver_sha224 |
|
0 commit comments